文章目录
前提
本次为一次简单的测试和验证,所以仅用一主一从的架构来演示。首先准备两台装有MySQL数据库的机器(一台作为master,另一台作为slave),而且要保证两台机器的环境必须一致,同时两台机器的时间也要保持一致。
两台机器均关闭防火墙及SELINUX
systemctl stop firewalld
systemctl disable firewalld
setenforce 0 --临时关闭selinux
vim /etc/sysconfig/selinux --修改配置文件永久关闭selinux
初始化从服务器数据,保持与主服务器数据的一致
从主库导出数据
mysqldump -p'QianFeng@123' --all-databases --single-transaction --master-data=2 --flush-logs >all.sql
可以使用 scp 命令将数据从主库机器copy 到从库:
scp all.sql root@192.168.31.101:/home
从库导入数据
mysql -uroot -p < all.sql
一、Master主节点
1、修改/etc/my.cnf配置文件
vim /etc/my.cnf --在[mysqld]下添加如下内容
=========================================================================================
server-id=1 --定义server id(在实际生产中可写为IP后四位数)
log-bin = mylog --开启binlog日志(不定义路径的话默认在/var/lib/mysql/下)
gtid_mode = ON --开启gtid
enforce_gtid_consistency=1 --强制gtid
=========================================================================================
systemctl restart mysqld --重启
2、主服务器创建账户
grant replication slave,reload,super on *.* to 'slave'@'%' identified by 'Qf@12345!';
mysql> flush privileges;
=========================================================================================
注意:
在真实生产环境中需采用高级别的密码,同时将'%'换成slave对应的IP
参数:
- replication slave权限:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
- super权限:允许用户使用修改全局变量的SET语句以及CHANGE(属于MASTER语句)
- reload权限:必须拥有reload权限,才可以执行flush[tables | logs | privileges]
二、Slave从节点
1、修改/etc/my.cnf添加如下配置
server-id=2
gtid_mode = ON
enforce_gtid_consistency=1
为保证从服务器数据安全性建议配置
从服务器连接主服务器的信息和中继日志存放在master_info和relay_log中
master-info-repository=TABLE
relay-log-info-repository=TABLE
==============================================================
重启mysqld服务
systemctl restart mysqld
2、slave端登录数据库连接master
mysql> \e
change master to
master_host='master1', 主ip 地址 最好用域名
master_user='授权用户', 主服务上面创建的用户
master_password='授权密码',
master_auto_position=1;
-> ;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
3、启动slave从节点
mysql> start slave; 启动slave角色
mysql> show slave status\G 查看状态,验证sql和IO是不是yes
IO线程和SQL线程均为Yes表示主从同步完成。
三、扩展:
主机故障或者宕机
面试题:mysql主从,master宕机,如何进行切换?
1、在salve执行
mysql> stop slave; 停止同步
mysql> reset master; 清楚主节点信息
2、查看是否只读模式:show variables like ‘read_only’;
注:只读模式需要修改my.cnf文件,注释read-only=1并重启mysql服务
3、查看从节点状态
show slave status \G
4、在程序中将原来主库IP地址改为现在的从库IP地址,测试应用连接是否正常