MySQL搭建双主复制架构MySQL安装双主复制架构搭建

MySQL安装

删除原有安装的mysql

检查是否已安装的mysql

rpm -qa | grep mysql
复制代码

image-20201104112833374.png
证明已安装mysql,需要删除
删除原有mysql

# 后缀文件名,以自己本地实际情况为准
rpm -e --nodeps --allmatches mysql-community-common-5.7.32-1.el7.x86_64
rpm -e --nodeps --allmatches mysql-community-server-5.7.32-1.el7.x86_64
rpm -e --nodeps --allmatches mysql-community-libs-5.7.32-1.el7.x86_64
rpm -e --nodeps --allmatches mysql-community-libs-compat-5.7.32-1.el7.x86_64
rpm -e --nodeps --allmatches mysql-mmm-2.2.1-15.el7.noarch
rpm -e --nodeps --allmatches mysql-mmm-agent-2.2.1-15.el7.noarch
rpm -e --nodeps --allmatches mysql57-community-release-el7-8.noarch
rpm -e --nodeps --allmatches mysql-community-client-5.7.32-1.el7.x86_64
复制代码
rpm 命令  
-e             删除指定的套件,卸载rpm包  
--nodeps       不验证套件档的相互关联性,强制删除  
--allmatches   删除符合指定的套件所包含的文件,删除所有相同名字的包
复制代码

再次验证是否卸载赶紧
image-20201104120131809.png
如果彻底删除,需要把所有跟mysql相关的文件或文件夹都删除 rm -rf命令
查询所有mysql相关的文件夹

find / -name mysql
复制代码

image-20201104144247112.png
删除相关目录和文件夹

# 后缀文件名,以自己本地实际情况为准
rm -rf /usr/share/mysql/ /var/lib/mysql/ /var/lib/mysql/mysql/ /usr/lib64/perl5/vendor_perl/DBD/mysql /usr/lib64/perl5/vendor_perl/auto/DBD/mysql/ /etc/selinux/targeted/active/modules/100/mysql/
复制代码

验证是否删除完毕
image-20201104145527455.png

检查mysql用户组和用户是否存在,如果没有,则创建

# 查询是否存在mysql用户组
cat /etc/group | grep mysql
# 查询是否存在mysql用户
cat /etc/passwd |grep mysql
复制代码

image-20201104150428768.png

# 添加mysql用户组
groupadd mysql
# 添加mysql用户
useradd -r -g mysql mysql
复制代码

image-20201104150700926.png

创建用户
​		useradd [options] 用户名
​		注: -g 指定用户所属的群组
删除用户
​		userdel [options] LOGIN
​		注: -f,--force   强制删除用户,不管该用户是否在使用
​		注: -h,--help    帮助信息
​		注: -r,--remove  删除用户和组并且删除用户的家目录和邮件通知目录
​		注: 不加参数删除用户  “userdel 用户名”  不加参数删除只会删除用户、密码、用户组、不会删除用户的家和用户的邮件目录
创建用户组
​		groupadd 组名
删除用户组
​		groupdel 组名
修改用户组
​		修改用户组名: groupmod -h 新组名  老组名
​		修改用户组ID: groupmod -g 新组ID 老组ID
复制代码

安装mysql(5.7版本)

下载mysql yum源

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
复制代码

image-20201104153433639.png
本地安装mysql yum源

yum localinstall mysql57-community-release-el7-8.noarch.rpm
复制代码
<!--备注: yum localinstall是用来安装本地rpm包的命令,首先rpm包要先下载到本地--> 
复制代码

image-20201104160259514.png
查看mysql yum源是否可使用

yum repolist enabled | grep "mysql.*-community.*"
复制代码
yum repolist all  #显示所有的仓库列表
yum repolist enabled  #显示可用的仓库列表
yum repolist disabled  #显示不可用的仓库列表
复制代码

image-20201104160417919.png
安装mysql服务

yum install -y mysql-community-server
复制代码
mysql 目前分两个版本,商业版和社区版。
mysql-community-server 是社区版,免费提供的,而商业版是收费的
复制代码

image-20201104160557898.png
启动mysql

systemctl start mysqld
复制代码

若出现如下问题,执行如下步骤(若成功,请忽略)
image-20201104170930595.png
解决报错步骤一:执行journalctl -xe 命令

journalctl -xe
复制代码

提示:Could not open file '/var/log/mysqld.log' for error logging: Permission denied
image-20201104171222734.png
解决报错步骤二:修改文件的拥有者和群组

chown -R mysql:mysql /var/log/mysqld.log
复制代码

解决报错步骤三:查看mysql配置文件my.cnf,获取data目录

tail /etc/my.cnf
复制代码

image-20201104174347389.png
查看mysql中的data目录内是否有数据,若有数据,则清空目录

cd /var/lib/mysql
复制代码

image-20201104174757599.png
解决报错步骤三:清空mysql data目录

rm -rf *
复制代码

image-20201104175211830.png
解决报错步骤四:再次启动mysql

systemctl start mysqld
复制代码

image-20201104175320723.png
设置mysql服务开机自启动

systemctl enable mysqld
复制代码

重新加载服务的配置文件

systemctl daemon-reload
复制代码

如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载
查看mysql是否启动成功

ps -ef|grep mysql
复制代码

image-20201104175958851.png
说明启动成功
获取mysql默认的密码

grep password /var/log/mysqld.log
复制代码

image-20201104180424560.png
使用默认密码进入mysql

mysql -uroot -p #回车输入密码
复制代码

登录成功
image-20201104224416277.png
修改MySQL密码

 ALTER USER 'root'@'localhost' IDENTIFIED BY 'kaikeba100';
复制代码

退出后,使用新密码重新登录
image-20201104231704727.png

双主复制架构搭建

创建replication 用户

Master01机器、Master02机器创建replication 用户

create user replication identified by "kaikeba100";

grant all privileges on *.* to replication@'%' identified by 'kaikeba100';

flush privileges;
复制代码

image-20201105005438437.png

开启mysql bin_log日志

Master01机器:开启mysql bin_log日志

# 编辑mysql配置文件
vim /etc/my.cnf
# 将log_bin注释打开,并标识server身份
复制代码

image-20201105011207279.png

systemctl restart mysqld
复制代码

Master02机器:开启mysql bin_log日志
同上,log_bin注释打开,server-id设置为2,并重启MySQL服务
image-20201105011327700.png

mysql 备份

Master01机器:mysql 备份

mysqldump --single-transaction --master-data=2 --all-databases -uroot -pkaikeba100 > dump1.sql;
复制代码
mysqldump命令

​	--all-databases:导出全部数据库

​	--master-data:在备份文件中写入备份时的binlog文件,在恢复进,增量数据从这个文件之后的日志开始恢复。值为1时,binlog文件名和位置没有注释,为2时,则在备份文件中将binlog的文件名和位置进行注释

​	--single-transaction:适合innodb事务数据库的备份。保证备份的一致性,原理是设定本次会话的隔离级别为Repeatable read,来保证本次会话(也就是dump)时,不会看到其它会话已经提交了的数据。 
复制代码

image-20201105014424354.png
Master01机器:查看生成的备份文件,获取MASTER_LOG_FILE和MASTER_LOG_POS

more dump1.sql
复制代码

image-20201105015241650.png
Master02机器:复制机器一的数据

change master to master_host='10.0.10.240',master_user='replication',master_password='kaikeba100',MASTER_LOG_FILE='rabbitmq001-bin.000001',MASTER_LOG_POS=154;
复制代码

image-20201105020219659.png
Master02机器:执行主从复制命令

start slave;
复制代码
注:关闭slave命令: stop slave
复制代码

Master02机器:查看slave状态

show slave status \G;
复制代码

image-20201105023813197.png
Master02机器:mysql 备份

mysqldump --single-transaction --master-data=2 --all-databases -uroot -pkaikeba100 > dump2.sql
复制代码

image-20201105021402497.png
Master02机器:查看生成的备份文件,获取MASTER_LOG_FILE和MASTER_LOG_POS

more dump2.sql
复制代码

image-20201105021650151.png
Master01机器:复制机器二的数据

change master to master_host='10.0.10.241',master_user='replication',master_password='kaikeba100',MASTER_LOG_FILE='rabbitmq002-bin.000003',MASTER_LOG_POS=154;
复制代码

image-20201105022110247.png
Master01机器:执行主从复制命令

start slave;
复制代码

image-20201105022128363.png
Master01机器:查看slave状态

show slave status \G;
复制代码

image-20201105024208491.png

测试功能

Master01机器:创建一个测试库test
image-20201105030312937.png
在Master02机器上会自动出现test测试库