主从复制
主从复制过程存在三个线程,Master端的I/O线程,Slave的I/O线程与SQL线程。Master端需要开启binlog日志,Slave端需要开启relaylog。
1、Slave端的I/O读取master.info文件,获取binlog文件名和位置点,然后向Master端的I/O线程请求,该binlog文件名和位置点的binlog信息。
(master.info文件在配置主从复制时使用change master命令来指定生成)
2、Master端的I/O线程会根据Slave端的I/O线程请求的信息来读取Master的binlog日志信息与及读取到最新的binlog文件名和位置点一同返回给Slave的I/O线程。
3、Slave端的I/O线程会把获取到的binlog日志写入relaylog(中继日志)文件中,并且更新master.info文件信息。(把读取到Master最新的binlog日志文件名和位置点更新到master.info文件中,下一次当前位置去读取Master的binlog日志)
4、Slave端的SQL线程会定期读取relaylog,把二进制的日志解析成SQL语句,并执行这些SQL语句,同步数据到从库中。
图解:
注: mysql 数据库的版本,两个数据库版本要相同,或者 slave 比 master 版本高
主从复制
环境:
Server1(master):172.25.24.1
Server2(slave):172.25.24.2
Mysql 版本:5.7
本篇博客中涉及的所有软件包下载可参考此博客:https://blog.csdn.net/qq657886445/article/details/83662696
Server1
安装 mysql
vim /etc/my.cnf 修改配置文件 并开启 mysql
在[mysqld]下添加以下参数
server-id=1 #必须为 1 到 232-1 之间的一个正整数值
log-bin=mysql-bin #启动二进制日志系统
mysql 初始化
cat /var/log/mysqld.log | grep password #查看初始密码
mysql_secure_installation #安全初始化 Westos.3q
Enter password for user root: #输入从日志中查看到的密码
Change the password for root ? ((Press y|Y for Yes, any other key for No) : #是否修改root密码,此处回车即可
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y #是否移除匿名用户
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y #是否禁止root用户远程登陆
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y #是否移除test测试库
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y #是否刷新数据库授权表
登陆 mysql 进行授权
GRANT REPLICATION SLAVE ON *.* TO redhat@'%' IDENTIFIED BY 'Westos.3q';
Server2
安装 mysql
vim /etc/my.cnf 修改配置文件 并开启 mysql
添加
server-id=2
mysql 初始化 #密码在/var/log/mysqld.log 中查看
登陆 mysql 指定要复制的 master,并开启 slave
change master to master_host='172.25.24.1',master_user='redhat',master_password='Westos.3q',master_log_file='mysql-bin.000003',master_log_pos=995; #指定要复制的 master 在master主机中登陆数据库show master status; 查看master_log_file和master_log_pos
start slave; #开启 slave
show slave status \G; #查看 slave 状态信息,以下两个线程为 Yes 表示连接成功即主从复制配置完成
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
基于gtid主从复制
GTID:
1)全局事务标识:global transaction identifiers。
2)GTID是一个事务一一对应,并且全局唯一ID。
3)一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。
4)GTID用来代替传统复制方法