前提:本教程只备份指定数据库mis
主服务器IP:192.168.1.10
从服务器IP:192.168.1.20
1:主服务器锁定数据库,避免Position变化
flush tables with read lock;
2:主服务器将要备份的数据库导出到备份文件,导入到从服务器,使得两个服务器的数据库有相同的初态,否则Slave_SQL_Running 不等于YES
3:备份完成后,解锁主服务器数据库
unlock tables;
4:配置从服务器数据库配置文件
[mysqld]
server-id = 2 # 服务器唯一编号,比主服务器小,主服务器一般是1,必须
log-bin = mysql-bin # 开启mysql binlog功能,二进制日志,必须
replicate_wild_do_table=mis.% # 只同步mis 库下的表,非必须
relay_log=mysqld-relay-bin # 记录中继日志,非必须
log-slave-updates=YES # 从服务器同步后记录日志,非必须
修改完成后重启mysql服务。
5:查看主服务器数据库状态
show master status
6:主服务器创建允许从服务器同步数据的账户:
创建用户:CREATE USER 'bakuser'@'%' IDENTIFIED BY 'password';
授权用户:GRANT REPLICATION SLAVE ON mis.* TO 'bakuser'@'%';
7:从服务器开启同步:
change master to
master_host='192.168.1.10',
master_user='bakuser',
master_password='password',
master_log_file='mysql-bin.000092',
master_log_pos=1167;
运行成功 --->配置完以上后,重启从服务器mysql服务。
8:查看从服务器是否已经成功开启同步:
show slave status
其中:Slave_IO_Running和Slave_SQL_Running的状态都是YES,说明同步开启成功。
到这一步,主从服务器已配置完毕,更改主服务器mis 数据库内容,从服务器也会相应更改,但是从服务器更改时,主服务器不会更改,所以要保住两个数据相互一致,需要配置主主服务器
在主从配置的基础上实现双主备份
9:从服务器创建允许主服务器同步数据的账户:同步骤6
10:配置主服务器数据库配置文件:同步骤4,server-id 得比从服务器数据库配置的小
11:记录从服务器二进制日志文件名与位置:同步骤5
12:主服务器开启同步:同步骤7
13:重启mysqld服务后,查看主服务器是否已经成功开启同步:同步骤8
问题:
1:Position 值变化原因:Position 值随着mysql 有增删改查 ,bin-log日志就增加,那么Position 肯定会变化
答:FLUSH TABLE WITH READ LOCK; 锁库position就停了,配置完成前再解锁可保证Position 同步变化
2:为什么要设置replicate_wild_do_table(指定同步的数据库)
答:replicate_do_db 跨数据执行sql 语句不会被执行,默认只执行当前数据库语句,replicate_wild_do_table可以确保需要同步的数据库实时更新,不需要的数据库被排除在外
3:Slave_IO_Running = Connecting
答:1:网络不同,始终处于待连接状态,相互ping 主从服务器,观察连接状态,互相开启端口3306 通讯;
2:用户权限不够,配置的用户没有配置允许同步数据,或者用户允许连接的IP有所指定,可以改成正确的指定IP或者%(通配)
3:配置文件问题,检查以上配置是否都正常,检查是否有【bind-address】(数据库绑定了IP,指定IP才能访问,应当注释掉)
4:Slave_IO_Running = No
答:主从同步配置错误,例如:启动一次数据库,就会产生新的mysql-bin 文件,导致配置的master_log_file 不可用,或者Position 变化导致配置的master_log_pos 不可用
5:Slave_SQL_Running = No
答:主从数据库初态内容不一致照成的,例如:数据库重启或者有增删改查等操作在配置未完成前,Position 变化导致配置的master_log_pos 不可用
参考:https://www.cnblogs.com/yixiao21/p/8372214.html