一、介绍
依赖于二进制日志的,准实时备份的一个多节点架构
二、主从复制的前提(如何搭建)
至少两个或多个实例
不同的server_id
主库需要开启二进制日志
主库需要授权一个专用复制用户
先把主库前期的数据做备份,先恢复到从库
开启专用复制线程
三、搭建主从复制(采用单机多实例模式)
3.1.准备多实例
准备多实例 参照第二天的笔记
并启动两台多实例
3.2.检查server_id
mysql -uroot -p -S /data/3307/mysql.sock -e "select @@server_id;"
mysql -uroot -p -S /data/3308/mysql.sock -e "select @@server_id;"
注意:两台实例的server_id不能重复
配置方法:
vim /data/3307/my.cnf
server_id=7
。。。。
3.3.查看主库二进制日志状态(必须开启)
[root@mysql52 ~] mysql -uroot -p -S /data/3307/mysql.sock -e "show variables like '%log_bin%'"
+---------------------------------+----------------------------+
| Variable_name | Value |
+---------------------------------+----------------------------+
| log_bin | ON |
| log_bin_basename | /data/3307/mysql-bin |
| log_bin_index | /data/3307/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+----------------------------+
3.4.主库创建专用复制用户
mysql> grant replication slave on *.* to repl@'10.0.0.%' identified by '123456';
3.5.对进行主库数据备份
mysqldump -uroot -p123456 -S /data/3307/mysql.sock -A --master-data=2 -R -E --triggers --single-transaction >/tmp/3307full.sql
3.6.数据恢复到从库(3308)
mysql> set sql_log_bin=0; 临时关闭二进制日志记录
mysql> source /tmp/3307full.sql; 恢复数据
mysql> set sql_log_bin=1; 重新打开二进制日志记录,或退出重进一个效果
7 配置3308从库
mysql> help change master to 获取基本参数,然后修改根据情况修改,
修改后录入MySQL即可,如下:
mysql> CHANGE MASTER TO
MASTER_HOST='10.0.0.51',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_PORT=3307,
MASTER_LOG_FILE='mysql-bin.000008',
MASTER_LOG_POS=444,
MASTER_CONNECT_RETRY=10;
mysql> start slave;
从000008文件开始主从复制
从444gtid号开始主复制
这些数据需要查看全备的文件中查看获取
vim /tmp/3307full.sql
22 -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000008', MASTER_LOG_POS=444;
如果上述信息不小心写错了,别害怕:
mysql> stop slave; 停止主从复制
mysql> reset slave all; 关闭主从复制
mysql> CHANGE MASTER TO 重新录入连接主库的信息
MASTER_HOST='10.0.0.51',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_PORT=3307,
MASTER_LOG_FILE='mysql-bin.000008',
MASTER_LOG_POS=444,
MASTER_CONNECT_RETRY=10;
mysql> start slave; 启动主从
查看从库是否正常
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如上两个是yes代表成功,其它参数见下文
主从搭建就算OK了,下文讲解 主从复制工作过程
四、主从复制工作过程
4.1名词认识
文件
主库:binlog
从库:relay-log 中继日志
master.info 主库信息文件
relay-log.info 中继日志应用信息
线程
主库:binlog_dump_thread 二进制日志投递线程
mysql -uroot -p -S /data/3307/mysql.sock -e "show processlist" #查看主库线程是否正常 出现binlog dump为正常
从库:IO-Thread :从库IO线程 : 请求和接受binlog
SQL_Thread : 从库的SQL线程 : 回放(运行)日志
4.2工作原理
开局上图
来自老师:
主从oard.png主从d.png 主从复制原理图.png
(1)从库执行 change master to 语句,会立即将主库信息(IP、端口、gtip号等)记录到master.info中
(2)从库执行 start slave语句,会立即生成IO_T和SQL_T(IO线程和SQL线程)
(3)IO_T 读取master.info文件,获取到主库信息
(4)IO_T 连接主库,主库会立即分配一个DUMP_T(dump线程与从库进行联系),进行交互
(5)IO_T 根据master.info binlog信息,向DUMP_T请求最新的binlog
(6)主库DUMP_T,经过查询,如果发现有新的,截取并反回给从库IO_T
(7)从库IO_T会收到binlog,存储在TCP/IP缓存中,在网络底层返回ACK
(8)从库IO_T会更新master.info ,重置binlog位置点信息
(9)从库IO_T会将binlog,写入到relay-log中
(10)从库SQL_T 读取Relay-log.info 文件,获取上次执行过的位置点
(11)SQL_T按照位置点往下执行relaylog日志
(12)SQL_T执行完成后,重新更新relay-log.info
(13)relaylog定期自动清理的功能。
细节:
主库发生了信息的修改,更新二进制日志完成后,会发送一个“信号”给Dump_T,Dump_T通知给IO_T线程
网友评论