MySQL主从复制搭建
系统版本:Oracle Linux Server release 6.9
主服务器:
IP:192.168.232.101
从服务器:
IP:192.168.232.100
步骤:
- 主库开启binlog功能,并设置server_id(不能跟从库相同);
- 创建从库用于复制用的数据库账号;
- 为当前数据库做全备;
- 设置从库server_id(不能跟主库相同);
- 恢复主库的全备到从库;
- 配置从库master的信息;
- 开启同步;
- 状态检查;
具体操作如下:
1.主库开启binlog功能,并设置server_id
编辑vi /etc/my.cnf文件,并 [mysqld] 节点下加入如下内容:
2.创建从库用于复制用的数据库账号
grant replication slave on *.* to rep@'%.%.%.%' identified by '123'
3.为当前数据库做全备
mysqldump -uroot -p -A -B -x --master-data=2 > rep.sql
4.设置从库server_id
编辑vi /etc/my.cnf文件,并 [mysqld] 节点下加入如下内容:
5.恢复主库的全备到从库
mysql -uroot -p < rep.sql
6.配置从库master的信息
进入MySQL中执行如下命令
CHANGE MASTER TO
MASTER_HOST='192.168.232.101',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='123'
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=5660;
参数说明:
MASTER_HOST:主服务器 IP 地址
MASTER_PORT:主服务器端口
MASTER_USER:用于主从复制的账号
MASTER_PASSWORD:主从复制账号的密码
MASTER_LOG_FILE=:binlog文件(全备时主库最新的binlog文件名)
MASTER_LOG_POS=:binlog位置(全备时主库最新的binlog文件中的备份点)
7.开启同步
从库执行如下命令:
Mysql> Start slave
8.状态检查
从库执行如下命令:
Mysql> show slave status \G
如果Slave_IO_Running、Slave_SQL_Running 都为YES,则表示成功。
从服务器开启log_slave_updates 这个参数是,从服务器可以作为其他服务器的主服务器,也就是:主 à 从 à 从 模式;
主从切换
场景一、主宕机且无法开机
从库操作:
- show slave status \G 查看状态,看是否所有的binlog已经读过来了,是否丢数据
- 开启binlog且开启读写(show variables like ‘%read_only%’)
- stop slave
- reset master
- reset slave
- 记录show master status的binlog信息(后续主机修好后可配置同步)
场景二、主从正常,手动切换
切换操作同场景一
主转从操作同初次配置一样;
PS:
# 主执行:
show master status # 记录File、Position
# 从执行:
Mysql> select master_pos_wait(File, Position);
可以使用此查询得到同步间隙为多少