基本步骤
- 在每台服务器上创建复制账号
- 配置主库和备库
- 通知备库连接到主库并从主库复制数据
在每台服务器上创建复制账号
grant replication slave, replication client on *.*
to repl@'192.168.0.%' identified by 'p4ssword';
配置主库和备库
- 在主库的my.cnf文件中增加或修改如下内容:
log_bin=mysql-bin # 默认情况下,根据机器名来命名的
# 如果之前没有在MySQL的配置文件中指定log_bin选项,就需要重新启动MySQL。
server_id=92168410 # 使用服务器IP地址的末8位
show master status # 检查二进制日志文件是否已经在主库上创建
- 在备库的my.cnf文件中增加类似的配置,并且同样需要重启MySQL:
log_bin=mysql-bin
server_id=92168411
relay_log=/var/lib/mysql/mysql-relay-bin # 指定中继日志的位置和命名
log_slave_updates=1 # 允许备库将其重放的时间也继续道自身的二进制日志中
read_only=1 # 组织任何没有特权权限的线程修改数据
通知备库连接到主库并从主库复制数据
- 在备库上执行
这一步不要通过修改my.cnf来配置,而是使用change master to语句,该语句完全替代了my.cnf中相应的设置,并且允许以后指向别的主库时无需重启备库。
change master to master_host='server1',
master_user='repl',
master_password='p4ssowrd',
master_log_file='mysql-bin.000001',
master_log_pos=0; # 从日志的开头读起
show slave status\G # 检查复制是否正确执行
# Slave_IO_State, Slave_IO_Running, Slave_SQL_Running这三列显示当前备库复制尚未运行
start slave; # 开始复制
show slave status\G # 从输出可以看出I/O线程和SQL线程都已经开始运行,Seconds_Behind_Master的值也不再为NULL
- 在主库上执行
show processlist\G # 在主库上可以看到由备库I/O线程向主库发起的连接
- 在备库上执行
show processlist\G # 在备库上也可以看到两个线程,一个是I/O线程,一个是SQL线程
# 这些线程总是运行在“system user”账号下