mysql 5.7 备份_mysql5.7主从复制配置与备份

mysql5.7主从复制配置与备份

一、主从复制架构

mysql 5.7 备份_mysql5.7主从复制配置与备份_第1张图片

mysql 主从至少需要2台服务器

首先 master上开启了bin-log日志功能,将master上的增删改更新等操作的sql语句记录下来

master开启IO线程吗,供slave节点获取

slave开启IO线程获取master上的bin-log日志,并写入relay-log中;开启sql线程读取relay-log中的sql语句

所以主从复制的流程为

slave通过IO线程连接master,并请求master从指定位置发送bin-log日志内容

master接收到slave的IO线程请求,根据bin-log中的position点的位置发送给salve的IO,同时告知最新的bin-log文件名和更新position点

slave IO线程接收到信息后,将接收的日志内容添加到relay-log日志文件的最末端

slave sql线程检测到relay-log内容有更新,会解析并执行relay-log内的sql语句

执行完成,master和slave库保持数据一致

二、mysql主从源码编译安装

详见

注意关闭SELINUX和防火墙

setenforce 0 #临时关闭SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #永久关闭SELinux(重启生效)

systemctl stop firewalld.service #临时关闭防火墙

systemctl disable firewalld.service #永久关闭防火墙

三、配置master

1.配置/etc/my.cnf

server-id=1

log-bin=mysql-bin

298e9c178269d5a38e744f469e08e59e.png

2.进入mysql 添加 复制权限给从库

mysql -uroot -pHuawei12#$ -e "grant replication slave on *.* to 'mysql_copy'@'%' identified by 'Huawei12#$';flush privileges;"

3.重启mysql

systemctl restart mysql

4.查看master的bin-log和pos点

show master status;

mysql 5.7 备份_mysql5.7主从复制配置与备份_第2张图片

四、配置从库

1.配置/etc/my.cnf

server-id=2

2.重启数据库

systemctl restart mysql

3.指定主库位置

mysql -uroot -pHuawei12#$

mysql -uroot -pHuawei12#$

change master to master_host='192.168.197.129',master_user='mysql_copy',master_password='Huawei12#$',master_log_file='mysql-bin.000008',master_log_pos=154;

flush privileges;

4.开启slave同步

start slave;

mysql 5.7 备份_mysql5.7主从复制配置与备份_第3张图片

5.查看slave的状态

show slave status\G

mysql 5.7 备份_mysql5.7主从复制配置与备份_第4张图片

五、测试主从复制

1.在master创建一个数据库

mysql 5.7 备份_mysql5.7主从复制配置与备份_第5张图片

2.在slave查看是否有test数据库

mysql 5.7 备份_mysql5.7主从复制配置与备份_第6张图片

六、主从复制故障恢复

如果主从复制的两台服务器中一台宕机或者网络中断导致主从复制失效,需要重新手动同步

1.方法一:跳过此次错误,此方法使用时可能会丢失少许数据,适用于数据要求不高场景

# master主库设置读锁,不允许写数据

flush tables with read lock;

# slave从库恢复同步状态

stop slave;

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

start slave;

show slave status\G

# 主库开启读

unlock tables;

2.方法二:mysqlbinlog通过relaylog日志导出导入(增量备份)

#slave从库将relay-bin日志导出

mysqlbinlog /var/lib/mysql/mariadb-relay-bin.000002> /home/mysql_bak.sql # 导出

#手动同步里面的数据

mysql

source /home/mysql_bak.sql; # 导入

mysql 数据库名 < /home/mysql_bak.sql # 导入

3.方法三:mysqldump通过将数据库导出导入(全量备份)

mysqldump -uroot -pHuawei2#$ test -l -F > /tmp/test.sql #全量导出

mysql -uroot -pHuawei2#$ test -v -f < /tmp/test.sql #全量导入

你可能感兴趣的:(mysql,5.7,备份)