mysql的主从配置

mysql主从同步定义

主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。

配置主从同步

如果不是一开始就部署的主从,那么后面最好把主库的数据先同步一份到从库上,以免后面各种报错.其中下面介绍的slave-skip-errors=1032就是我遇到的,从库数据缺失的时候报的record not exist.

同步数据的时候可以先给master库上锁

#登录数据库后刷新所有的表,同时给数据库加上一把锁,阻止对数据库进行任何的写操作
flush tables with read lock;

然后开始巴拉巴拉同步数据.
比如sqldump导出数据

不压缩

mysqldump -uroot -p'123456' -S /data/3306/data/mysql.sock --all-databases > /server/backup/mysql_bak.$(date +%F).sql

压缩

mysqldump -uroot -p'123456' -S /data/3306/data/mysql.sock --all-databases | gzip > /server/backup/mysql_bak.$(date +%F).sql.gz

同步完了记得解锁

unlock tables;

在主服务器上,必须开启二进制日志机制和配置一个独立的ID

[mysqld]
log_bin         = mysql-bin
server_id       = 2
#binlog-do-db指定主库的哪一个数据库,不添加这行表示同步所有,多个库可以用逗号分隔
binlog-do-db=xxx-xxx-prod
#这是不记录binlog,来达到从库不同步mysql库,以确保各自权限.忽略多个库也可以用逗号分隔
binlog-ignore-db = mysql

然后在主库上创建一个只能进行主从同步的账号

demo,创建账号的说明在我另一篇博文中有提及https://blog.csdn.net/weixin_43944305/article/details/108548397

grant replication slave on *.* to ‘userName’@‘%’ identified by ‘password’;

在开始复制进程前,在主服务器上记录二进制文件的位置信息
登录mysql或者navicat连上mysql后

show master status

在这里插入图片描述

在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号

[mysqld]
#server_id必需和主库的不一样
server_id       = 3
#设定从库的哪一个数据库需要复制主库的数据(多数据库使用逗号,隔开)
replicate-do-db = xxx-xxx-slave
#指定master的哪个数据库到slave的哪一个数据库
replicate-rewrite-db = xxx-xxx-prod -> xxx-xxx-slave
#从库同步的时候可能会报一些record不存在等错误,这边可以选择跳过此类错误
slave-skip-errors=1032

我这边因为是主库和从库不是同一个所以指定了,这里slave端还有其他参数

#设定从库的哪一个数据库需要复制主库的数据(多数据库使用逗号,隔开)
replicate-do-db
#设定需要忽略的复制数据库 (多数据库使用逗号,隔开)
replicate-ignore-db
#设定需要复制的表
replicate-do-table 
#设定需要忽略的复制表
replicate-ignore-table
#同replication-do-table功能一样,但是可以通配符.
#demo---->replicate-wild-do-table=db_name.% 只复制哪个库的哪个表
replicate-wild-do-table
#同replication-ignore-table功能一样,但是可以加通配符
#demo---->replicate-wild-ignore-table=mysql.% 忽略哪个库的哪个表
replicate-wild-ignore-table

从库需要导入数据的话就可以导入了

比如.sql文件导入

mysql -uroot -p'123456' -S /data/3306/data/mysql.sock < /server/backup/mysql_bak.2015-07-01.sql

数据导入完后开始配置同步参数,登陆mysql,输入如下信息:

CHANGE MASTER TO
MASTER_HOST='master_host_name',
MASTER_PORT=3306,
MASTER_USER='replication_user_name',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='recorded_log_file_name',

在这里插入图片描述

启动主从同步进程

start slave;

停止主从同步进程

stop slave;

检查状态

show slave status \G

下面的两个进程都显示YES则表示配置成功
在这里插入图片描述

加入从库同步的时候报错了,这个时候可以手动操作一下跳过这个报错

#先停止slave的线程
stop slave; 
#跳过几个错误,这里写的是跳过1个错误
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
#启动从库同步线程
start slave;

观察slave_sql_Runing是否为YES

show slave status;

从slave服务器上备份数据

首先暂停从服务器的复制进程

mysqladmin stop-slave

或者只是暂停SQL进程(从服务器仍然能接收二进制日志的事件,但不会执行这些事件,这样能在重启SQL进程时加快复制进度)

mysql -e ‘stop slave sql_thread;

使用mysqldump导出全部或部分的数据库

mysqldump --all-databases > fulldb.dump

在导出数据库后,重启复制进程

mysqladmin start-slave

参考了大佬的博文,并实践了一波,加了点自己的心得
https://www.cnblogs.com/kylinlin/p/5258719.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值