mysql主从复制

复制过滤器
系统数据库不想复制过去,可以挑选一些复制
准备配置文件/etc/my.cnf

配置主服务器
grant replication slave on . to repluser@'192.168.1.%' identified by 'centos';
配置从服务器
从服务器不需要加log_bin二进制日志
Help change master to 帮助

此处端口号可以不加,默认3306
查看状态show slave status;
此时slave_IO_Running 和slave_SQL_Running 两个线程都是no
开启start slave;
开启后 查看状态
Read_Master_Log_Pos: 399在主服务器读的
Exec_Master_Log_Pos: 399 执行主服务器的
Seconds_Behind_Master: 0和主服务器的时间落差
即使从服务器关闭 再开启还会同步数据
Relay_log 中继日志
把主服务器的二进制日志复制到从服务器上面,然后读取执行二进制日志将数据导入从服务器上面

例子
一个机器数据库1T需要同步到另外一个机器

先对主服务器做一个完全备份
Mysqldump -F -A --single-transaction --master-data=1 > /app/
对从服务器
MariaDB [(none)]> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.13',
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='centos';
同步

此时查看状态 show slave statusG;
Last_SQL_Error: Error 'Can't create database 'wangdb'; database exists' on query. Default database: 'wangdb'. Query: 'create database wangdb'
因为第一次mysql < all.sql时已经把数据创建出来了,此时再同步会从头复制 把wangdb再创建一次
所以此处要添加指定位置
MASTER_LOG_FILE='mariadb-bin.000006',
MASTER_LOG_POS=245;
查看数据库是否只读,防止数据库在从服务器上修改对主服务器破坏
show variables like 'read%';

Master_Log_File
I/O线程当前正在读取的主服务器二进制日志文件的名称。
Read_Master_Log_Pos
在当前的主服务器二进制日志中,I/O线程已经读取的位置。
Relay_Log_File
slave的SQL线程当前正在读取和执行的中继日志文件的名称。
Relay_Log_Pos
在当前的中继日志中,slave的SQL线程已读取和执行的位置。Relay_Master_Log_File
由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称。
Exec_Master_Log_Pos
来自主服务器的二进制日志的由SQL线程执行的上一个时间的位置(Relay_Master_Log_File)。在主服务器的二进制日志中的(Relay_Master_Log_File, Exec_Master_Log_Pos)对应于在中继日志中的(Relay_Log_File,Relay_Log_Pos)。
Relay_Log_Space
所有原有的中继日志结合起来的总大小。
Seconds_Behind_Master
表示主从之间的时间差 是数字的时候表示相差多少秒 null表示未知数,一般主从复制出问题了会出现null的情况。

原文地址:https://www.cnblogs.com/zhuzhenlong/p/9750329.html