mysql的主从复制
主从复制开始前有个前提条件:两边的数据要一样,主必须开启二进制日志
异步主从复制
主从复制过程:master数据发生变化,产生新的二进制文件,master通知slave的I/O thread进程来读取master的二进制文件,slave的I/O thread 读取本地的master_info,携带master所需的验证信息和二进制日志读取的定位,master的log dump thread进程将master新增加的二进制日志内容发送给i/o thread ,slave收到日志后,将新的二进制日志写入relay_log,并更新master_info中的二进制的位置信息;slave的SQL thread进程读取更新的relay_log中的新内容并在数据库执行sql语句,从实现了master到slave的主从复制
mysql主从复制功能开启步骤
- 第一步:确保主从初始数据一致,使用全备
mysqldump -uroot -p'Sanchuang123#' --all-databases > /backup/all_db.sql
scp all_db.sql root@192.168.0.177:/root
mysql -uroot -p'Sanchuang1234#' <all_db.sql
-
第二步:开启master与slave的二进制日志功能
修改mysql的配置文件,启动二进制日志功能,
server_id=1
#binary log
log_bin
server_id = 1
- 第三步:在master服务器上创建一个用于主从复制的用户
grant **replication slave** on \*.\* to 'oudi'@'192.168.0.177' identified by 'Sanchuang123#';
**REPLICATION SLAVE** 常用于建立复制时所需要用到的用户权限,也就是slave server必须被 master server授权具有该权限的用户,才能通过该用户复制。
**REPLICATION CLIENT** 不可用于建立复制,有该权限时,只是多了可以使用如"SHOW SLAVE STATUS"、"SHOW MASTER STATUS"等命令。
-
第四步:在master和slave上关闭防火墙和selinux
-
第五步:配置slave,开启slave服务
在slave数据库中输入以下配置信息:
CHANGE MASTER TO MASTER_HOST='主服务器host',
MASTER_USER='用于主从复制的用户名',
MASTER_PASSWORD='用户密码',
MASTER_PORT=3306,
MASTER_LOG_FILE='master当前的二进制文档名称.00000XX',
MASTER_LOG_POS=master当前二进制日志的pos;
- 第六步:在slave上启动复制功能
start slave;
Master上查看所有从服务器
- SHOW SLAVE HOSTS;
如何清楚从服务器上的主服务器信息
stop slave;
reset slave all; 清除所有的master信息
Show slave status\G;
重新输入master的信息
CHANGE MASTER TO MASTER_HOST='192.168.0.218' ,
MASTER_USER='minhua',
MASTER_PASSWORD='Sanchuang123#',
MASTER_PORT=33060,
MASTER_LOG_FILE='Sanchuang-bin.000010',
MASTER_LOG_POS=154;
2.然后到从服务器上看,是否存在
半同步主从复制
主服务器有数据更新的操作时,先更新二进制日志,然后将更新的二进制日志发送到从服务器的relay-log(从服务器的SQL_thread读取relay-log将操作更新到从服务器),从服务器收到日志信息后返回确认请求,收到从服务器确认后主服务才落盘(将更新的数据信息写入磁盘)。
查看半同步相关的参数show variables like ‘%rpl_semi%’;
半同步主从复制开启步骤
第一步:在主服务器上安装插件
root@localhost [(none)]> **install plugin rpl_semi_sync_master soname 'semisync_master.so';**
第二步:在主服务器上启动半同步
root@(none) 15:45 mysql>**set global rpl_semi_sync_master_enabled=1;**
第三步:在从服务器上安装插件
**install plugin rpl_semi_sync_slave soname 'semisync_slave.so';**
第四步:从服务器上启动半同步
root@(none) 15:59 mysql>**set global rpl_semi_sync_slave_enabled=1;**
主库在10秒内没有收到从服务器的应答后自动改为异步复制,然后再引擎层提交事物
show status like ‘Rpl_semi_sync_master-status’; 知道当前主从复制的状态时半同步还是异步同步
延迟备份
登录到slave数据库服务器
stop slave
CHANGE MASTER TO MASTER_DELAY = N(秒)
start slave
show slave status \G;
GTID主从复制