一、MySQL主从同步
1.1 MySQL主从同步概述
实现数据自动同步的服务结构
主服务器:接受客户端访问连接
从服务器:自动同步主服务器数据
1.2 主从同步原理
master
启用binlog日志
Slave
Slave_IO:复制master主机 binlog日志文件里的SQL命令到本机的relay-log文件里
Slave_SQL:执行本机relay-log文件里的SQL语句,实现与Master数据一致
1.3 构建主从同步
构建思路
配置主服务器
启用binlog日志、授权用户、查看binlog日志信息
配置从服务器
设置server_id
确保与主服务器数据一致
指定主库信息
启动slave程序
查看状态信息
1.启用binlog日志
2.授权用户
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
3.查看binlog日志信息
mysql> show master status;
1 设置server_id
2 确保与主服务器数据一致。
3
mysql> change master to master_host="192.168.4.51" ,master_user="repluser", ,
master_password="123qqq...A" , master_log_file="master51.000001" , master_log_pos=441;
mysql> start slave;
mysql> show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_IO_Error: Slave_IO_Running的报错信息
Last_SQL_Error: Slave_SQL_Running的报错信息
mysql> stop slave ; #需要进行修改用户名及其相关密码时,先关掉服务
change master to master_user="repluser" ;
mysql> start slave;
mysql> show slave status \G
把从服务器 恢复为独立的数据库服务器的方法
[root@host52 mysql]# rm -rf master.info
[root@host52 mysql]# rm -rf relay-log.info
[root@host52 mysql]# rm -rf host52-relay-bin.*
[root@host52 mysql]# systemctl restart mysqld
主从从模式也是一样的配置
半同步复制
53设备 主服务器
mysql>install plugin rpl_semi_sync_master SONAME "semisync_master.so"; #安装并启动模块(主的模块)
mysql> select PLUGIN_NAME , PLUGIN_STATUS from information_schema.PLUGINS where PLUGIN_NAME like "%semi%";
mysql> set global rpl_semi_sync_master_enabled=1; #运行模块
mysql> show variables like "rpl_semi_sync_%_enabled";
52设备是53设备的从;是55设备分主
mysql> install plugin rpl_semi_sync_master SONAME "semisync_master.so"; #安装并启动模块(主的模块)
mysql> install plugin rpl_semi_sync_slave SONAME "semisync_slave.so"; #安装并启动模块(从的模块)
mysql> select PLUGIN_NAME , PLUGIN_STATUS from information_schema.PLUGINS where PLUGIN_NAME like "%semi%";
mysql> set global rpl_semi_sync_master_enabled=1; #运行模块(主的模块)
mysql> set global rpl_semi_sync_slave_enabled=1; #运行模块(从的模块)
mysql> show variables like "rpl_semi_sync_%_enabled";
55设备从服务器
mysql> install plugin rpl_semi_sync_slave SONAME "semisync_slave.so"; #安装并启动模块(从的模块)
mysql> select PLUGIN_NAME , PLUGIN_STATUS from information_schema.PLUGINS where PLUGIN_NAME like "%semi%";
mysql> set global rpl_semi_sync_slave_enabled=1; #运行模块(从的模块)
mysql> show variables like "rpl_semi_sync_%_enabled";
以上都是临时配置,当服务重启后会失效;永久配置需要修改配置文件
举例:54设备永久配置(/etc/my.cnf)
安装模块 启用模块
vim /etc/my.cnf
[mysqld]
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
:wq
] systemctl restart mysqld
mysql> show variables like "rpl_semi_sync_%_enabled";
当只配置了主从时,默认是属于异步复制