本文记述leeon在搭建MySQL Replication中的一些知识点和技巧。
1. 在Master机和Slave机中分别设置server-id为1和2,如果不设置server-id,那么slave会无法启动。因为默认my.cnf的server-id均为1。
2. 在Master机my.cnf中开启log-bin。
3. 为Master机中的MySQL开启一个用户权限,此用户为Slave机的MySQL从Master中获取数据用。
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
4. 执行
FLUSH TABLES WITH READ LOCK;
清空所有表和块写入语句。
5. 然后备份Master机中所有的数据,可以用mysqldump或者直接打包MySQL中的二进制文件。并将数据导入到Slave机的MySQL中。
6. 在Master机中执行:
SHOW MASTER STATUS;
记录下File 和 Position。
7. 关闭Master机的MySQL防止复制的数据和Slave的不一致。
8. 在Slave机中执行如下SQL:
CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='replication_user_name', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;
master_host_name 为Master的Host
replication_user_name 为第三步中设置的用户名
replication_password 为第三步中设置的密码
recoded_log_file_name 为第六步中记录的file
recorded_log_position 为第六步中记录的position
9. 在Slave的MySQL中执行“START SLAVE”来启动slave服务。利用“SHOW SLAVE STATUS”观察“Slave_IO_Running”和“Slave_SQL_Running”是否均为YES,如果不为Yes则说明启动失败,要观察error提示。
10. 执行“show processlist”来观察MySQL中的master-slave服务是否正常。
正常情况下提示:
Master:
| 3 | rep | 192.168.127.132:43625 | NULL | Binlog Dump | 3135 | Has sent all binlog to slave; waiting for binlog to be updated | NULL |
Slave:
| 1 | system user | | NULL | Connect | 3108 | Waiting for master to send event | NULL |
| 2 | system user | | NULL | Connect | -25725 | Has read all relay log; waiting for the slave I/O thread to update it | NULL
11. unlock tables。解锁Master机的MySQL。
----------------------------------------------------------------------------------------
补充:
Master 主要负责在Replication 环境中读取Master 端的binary 日志,以及与Slave 端的I/O 线程交互等工作。Slave 比Master 所要做的事情稍多一些,在系统中主要体现在两个线程上面。一个是负责从Master 请求和接受binary 日志,并写入本地relay log 中的I/O 线程。另外一个是负责从relay log中读取相关日志事件,然后解析成可以在Slave 端正确执行并得到和Master 端完全相同的结果的命令并再交给Slave 执行的SQL 线程。