mysql主从同步工作过程
同步原理
Master
启用binlog日志
Slave
-Slave_IO:复制master主机 binlog日志文件里的SQL命令到本机的relay-log文件里.
-Slave_SQL:执行本机relay-log文件里的SQL语句,实现与Master数据一致.
构建思路
配置主服务器
–启用binlog日志,授权用户,查看binlog
配置从服务器
–设置server_id
–确保与主服务器数据一致
–指定主库信息
–启动slave程序
–查看状态信息
主从同步配置步骤
配置主服务器
1.修改主配置文件,启用binlog日志
vim /etc/my.cnf
log_bin=日志名 //启用binlog日志
server_id=id值 //指定服务器ID号
2.用户授权
grant replication slave on . to repluser@"%" identified by “123456”
3.查看日志信息
mysql > show master status;
配置从服务器
1.修改主配置文件my.cnf
–指定server_id 不允许与主库server_id相同
2.确保与主服务器数据一致
–在主服务器上备份数据,将备份文件拷贝给从服务器
–从服务器使用备份文件恢复数据
–在从服务器查看备份文件中的binlog日志信息
//主库备份数据,–master-data记录当前备份数据对应的日志信息
#mysqldump -uroot -p密码 --master-data 数据库名 > /allbak.sql
#scp /allbak.sql root@192.168.4.52:/root/
//从服务器恢复数据
#mysql -uroot -p密码 数据库名 < /root/allbak.sql
#vim /root/allbak.sql //查看binlog日志名及偏移量
3.配置从服务器-指定主服务器信息
mysql > change master to
-> master_host=“192.168.4.51”, //主库ip地址
-> master_user=“repluser”, //主库授权用户
-> master_password=“123qqq…A”, //授权用户密码
-> master_log_file=“mysql51-bin.000001”, //主库日志文件
-> master_log_pos=441; //日志偏移量
mysql > start slave; //启动slave进程
mysql > show slave status \G; //查看
确认IO线程,SQL线程都是Yes状态,
备注
1.Master信息会自动保存到/var/lib/mysql/master.info文件;
2.若更改主库信息时,应先执行stop slave;修改后,再执行start slave;
相关文件
文件名 | 说明 |
master.info | 主库信息 |
relay-log.info | 中继日志信息 |
主机名-relay-bin.000001 | 中继日志 |
主机名-relay-bin.index | 索引文件 |
主从同步模式
1.主从数据库搭建(一主一从)
见上述操作步骤;
2.主从数据库搭建(一主多从)
从服务器2配置与从服务器1的配置一样,重复操作一遍即可.
3.主从从数据库搭建
级联复制(cascade):是指从主场地复制过来的又从该场地再次复制到其他场地,即A场地把数据复制到B场地,B场地又把这些数据或其中部分数据再复制到其他场地
1.配置主服务器(192.168.4.53)
1.1 启用binlog日志 vim /etc/my.cnf
[mysqld]
log_bin=master53
server_id=53
#systemctl restart mysqld
1.2.用户授权
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
2.配置从服务器(192.168.4.54)注意54应该是53的从,同时是55的主
2.1修改配置文件 vim /etc/my.cnf
server_id=54
log_bin=master53
log_slave_updates //允许级联复制
2.2 用户授权
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
2.3 指定主库信息
mysql> change master to master_host="192.168.4.53",
-> master_user="repluser",
-> master_password="123qqq...A",
-> master_log_file="master53.000001",
-> master_log_pos=154;
2.4 启动slave进程
mysql> start slave;
mysql> show slave status \G;
3.配置从服务器(192.168.4.55)
3.1修改配置文件,只配置server_id号即可
3.2指定主库信息
mysql> change master to master_host="192.168.4.54",
-> master_user="repluser",
-> master_password="123qqq...A",
-> master_log_file="",
-> master_log_pos=;
mysql> start slave;
mysql> show slave status \G;
4.主主数据库(互为主从)搭建
4.1 两台机器都需要编辑配置文件,设置server_id,log_bin="日志名"
4.2 两台机器都操作用户授权
4.3 互相指定主库信息
4.4 启动slave进程,查看状态
4.5 测试结果
复制模式
复制模式:从服务器把数据从主服务器同步到本机的工作模式.包括异步模式(默认),全同步模式,半同步模式.
异步复制: 主库执行完一次事务后,立即将结果返回给客户端,不关心从库是否已经接收并处理.
全同步复制: 主库执行完一次事务,且所有从库都执行了该事务后才将结果返回给客户端.
半同步复制: 介于异步复制和全同步复制之间.主库在执行完一次事务后,等待至少一个从库接收到信息并写入到relay log中才将结果返回给客户端.
模式配置
查看是否允许动态加载模块
mysql> show variables like “have_dynamic_loading”;
主服务器:
--加载插件:
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";
--修改配置文件
vim /etc/my.cnf
[mysqld]
plugin-load=rpl_semi_sync_master=semisync_master.so rpl_semi_sync_master_enabled=1
从服务器:
--加载插件:
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%";
--启动半同步复制
set global rpl_semi_sync_slave_enable=1;
----查看:mysql> show variables like "rpl_semi_sync_%_enabled";
--修改配置文件
vim /etc/my.cnf
[mysqld]
plugin-load=rpl_semi_sync_slave=semisync_slave.so rpl_semi_sync_slave_enabled=1