1.mysql主从同步原理及实例; 2.主从同步类型;3.主从同步的复制模式
一,mysql主从同步
1.概念:实现数据自动同步的服务结构
1.1主服务器: 接受客户端访问
1.2从服务器: 自动同步主服务器的数据
1.3 原理:
master:启用binlog日志.
slave:启用线程I/Othread,将主机master上binlog里的sql命令复制到本机的relay-log文件里.
启用线程SQLthread,读入本机relay-log的sql语句,实现与主机master同步数据.
2.实例:192.168.4.50做客户端.192.168.4.51搭建主服务器.192.168.4.52和192.168.4.53搭建从服务器.
思路:配置主库4.51->配置并定义从库4.52->配置并定义从库4.53->测试主从同步
拓扑图:
2.1 配置主库4.51
#vim /etc/my.cnf
[mysqld]
log-bin=db51 //启动日志
server_id=51 //指定服务器id
:wq //保存退出
#systemctl restart mysqld
# ls /var/lib/mysql/db51.* //查看binlog日志及索引
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A"; //授权给用户repluser
mysql> show master status; //查看日志信息
2.2 配置从库4.52
2.2.1 为了确保主库与从库的数据保持一致,在指定从库信息之前,需要备份主库4.51上的数据,恢复到从库4.52.
备份主库4.51的数据
]# mysqldump -uroot -p123qqq...A --master-data db2 > /db2.sql //备份主库4.51
]# scp /db2.sql root@192.168.4.52:/root/ //上传备份到从库4.52
在从库4.52上指定服务器id,并恢复数据,以确保与主库同步.
#vim /etc/my.cnf
[mysqld]
server_id=52 //指定服务器id
:wq
#systemctl restart mysqld
mysql> create database db2; //创建一个新的空库
]# mysql -uroot -pliusingbon52 db2 < /root/db2.sql //恢复数据到已建空库db2
2.2.2 在主机4.52上定义从库信息:
mysql>show slave status; //显示当前从库的信息,没有定义之前,内容为空
mysql> change master to
->master_host="192.168.4.51", //指定主库IP
->master_user="repluser", //指定授权用户
->master_password="123qqq...A", //指定授权用户的密码
-> master_log_file="db51.000001", //vim db2.sql查询得到主库的日志文件
->master_log_pos=441; //vim db2.sql查询得到主库的日志偏移量
mysql>start slave; //启动slave进程
mysql> show slave status \G; //查看slave状态信息,\G竖向显示内容
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.4.51
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: db51.000001
Read_Master_Log_Pos: 441
Relay_Log_File: db52-relay-bin.000002
Relay_Log_Pos: 315
Relay_Master_Log_File: db51.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
]# ls /var/lib/mysql 查看生成的相关文件:
Master.info,relay-log.info,db52-relay-bin.* 下图所示:
2.2.3 在主机4.53上定义从库信息,除个别参数不一致,其它与从库4.52一样,这里不再重复.
2.2.4 测试数据库的主从同步
方法1: 在主库4.51上做插入,修改,删除等操作,并在4.52上核实是否同步.
例: mysql> create db4; //创建库db4.
mysql> create table db4.t1(id char(10),name char(10)); //创建表结构t1
mysql> insert into db4.t1 values(1,"jim"); //为表格t1插入数据
mysql> select * from db4.t1; //查询数据
验证: 在主机4.52查看db4的相关信息.
方法2: 从客户端4.50上访问主服务器4.51并写入数据,查看从服务器4.52是否同步.
1.主机4.51的管理员在本机为客户端做访问授权.
mysql> grant select,insert on *.* to yaya99@"%" identified by "123qqq...A";
2.从客户端主机4.50访问数据库主服务器4.51
#mysql -h192.168.4.51 -uyaya99 -p123qqq...A
2.1 登录后查询:
2.2 在表格中插入一条信息4,ajiao,shopping,shenzheng
mysql> insert into db2.前任信息表 values(4,"ajiao","shopping","shenzheng");
2.3 分别在主库4.51,从库4.52和4.53上查看插入的信息是否写入.
二,主从同步类型
mysql同步的结构类型:
基本应用: 一主一从
扩展应用: 一主多从
链式复制 主 <-- 从 -<-- 从
互为主从 主 <--> 主
三,复制模式(主从同步)
复制模式产生的背景:为了加快服务器的响应速度,提升客户访问体验.
模式类型: 异步复制模式(默认); 全同步复制模式; 半同步复制模式.
异步复制: 主库执行完一次任务后,立即响应客户端,不关心从库是否同步成功.
全同步复制,也叫组同步复制:主库执行完一次任务,并成功同步到其它所有从库,才响应客户端.
半同步复制:介于异步复制和全同步复制之间,主库在执行完一次任务后,等待至少一个从库收到数据并写入relay log日志里,才响应客户端.
例:
在主机192.168.4.54上配置半同步复制模式,
1.查看数据库服务是否允许动态加载模块(默认允许)
mysql> show variables like "have_dynamic-loading";
2.命令行加载插件
2.1 查看模块状态
mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%'; //查询为空,没有内容,因为还没有加载插件
2.2 命令行加载插件
mysql> install plugin rpl_semi_sync_master SONAME "semisync_master.so";
//主模块
mysql> install plugin rpl_semi_sync_slave SONAME "semisync_slave.so";
2.3 再次查看模块状态,呈现active示意加载插件成功.
mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%'; //模块已经加载,并为active状态
+----------------------+---------------+
| plugin_name | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE |
| rpl_semi_sync_slave | ACTIVE |
+----------------------+---------------+
3.临时启用半同步复制
3.1查看变量模式状态,呈现OFF示意模式没有启用.
mysql> show variables like "rpl_semi_sync_%_enabled"; //这里的%代表master和slave两种模式.
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_slave_enabled | OFF |
+------------------------------+-------+
2 rows in set (0.01 sec)
3.2 临时启用
mysql> set global rpl_semi_sync_master_enabled=1; //激活主服务器复制模式
mysql> set global rpl_semi_sync_slave_enabled=1; //激活从服务器复制模式
3.3 再次查看模式状态,呈现为ON示意启用成功.
mysql> show variables like "rpl_semi_sync_%_enabled";
4.永久启用半同步复制
#vim /etc/my.cnf
[mysqld]
[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 //激活从服务器复制模式
5. 管理员登录mysql查看模块和模式的启用状态,呈现active或on示意启用成功.
结束.