MySql教程

mysql5.7.33主从复制

本文主要是介绍mysql5.7.33主从复制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

mysql5.7.33主从复制

1. 在两台数据库中分别创建数据库

 mysql>create database khtdb;

2. 在主服务器master进行如下配置:

vim my.cnf
#mysql的服务器分配id,在启用主从和集群的时候必须指定,每个节点必须不同
server-id = 11
#开启Binlog日志
log_bin=mysql-bin
#日志自动过期清理天数
expire_logs_days = 90
#binlog保存路径
log-bin=/kht/mysql5.7/binlog/logbin
#STATEMENT模式(SBR)
#在主服务器上执行的SQL语句,在从服务器上执行同样的语句,MySQL默认采用基于语句的复制,效率比较高。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)。
#ROW模式(RBR)
#row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍,不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
#MIXED模式(MBR)
#以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
binlog_format=ROW
#同步的数据库名称,指定mysql的binlog日志记录哪个db
binlog-do-db=khtdb

2.2 重启主服务器master并查看状态

systemctl restart mysql

#查看master的状态
mysql> show master status;
+---------------+----------+--------------+------------------+------------------                                                                                           -+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                                                                                            |
+---------------+----------+--------------+------------------+------------------                                                                                           -+
| logbin.000001 |      154 | test         |                  |                                                                                                              |
+---------------+----------+--------------+------------------+------------------

3. 从服务器slave的配置

vim my.cnf
#mysql的服务器分配id,在启用主从和集群的时候必须指定,每个节点必须不同
server-id=12
#开启Binlog日志
log_bin=mysql-bin
#日志自动过期清理天数
expire_logs_days = 90
log-bin=/kht/mysql5.7/binlog/logbin
binlog_format=ROW
#启用中继日志
relay-log=mysql-relay

3.1 主主复制

#参数是在slave上配置,指定slave要复制哪个库
replicate-do-db=khtdb
log-slave-updates
#提高效率,将不必要的资源不写入二进制文件
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#防止主键冲突,数据的id号从1开始,每次+2,即1,3,5....
auto-increment-increment=2
auto-increment-offset=1

3.2 配置从服务器slave登录主服务器的账号授权

--授权操作
grant replication slave on *.* to 'root'@'%' identified by 'kht123';
--刷新权限
flush privileges;

4. 重启从服务器slave并连接主服务器master

systemctl restart mysql

mysql> change master to master_host='192.168.2.129',master_user='slave',master_password='kht123',master_port=3306,master_log_file='logbin.000001',master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
#启动slave
mysql>start slave;
#查看slave的状态
mysql>show slave status\G(注意没有分号)
#注意Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

5. 若虚拟机是克隆的,则同一个克隆的mysql会产生UUID冲突,可以从日志中查看,
此时会造成Slave_IO_Running: NO

查找auto.cnf修改uuid即可:find -name auto.cnf
#重启mysql
service mysql restart
#停止链路
mysql>stop slave;
#启动链路
mysql>start slave;
#查看链路
mysql>show slave status \G
这篇关于mysql5.7.33主从复制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!