打理数据库服务器, 再怎么优化终究会面临一台再强的服务器也不够用的时候. 那就使用多台服务器做 Replication 吧. 先从2台 MySQL 服务器开始, 一台为主, 另一台为从. 基本的步骤是(装系统/装软件/配置网络连接什么的就略过了…
1, 在主服务器的配置(/etc/mysql/my.cnf)里添加
[mysqld]
log-bin=/var/log/mysql/mysql-bin.log
server-id=1
然后重新启动 mysql 服务.
2, 在从服务器的配置里添加
[mysqld]
server-id=2
然后重新启动.
3, 在主服务器上添加 replication 专用用户, 例如 repl
create user ‘repl’@’%.<domain.name>’ identified by ‘<pass>’ ;
grant replication slave on *.* to ‘repl’@’%.<domain.name>’ ;
flush privileges ;
4, 锁定主数据库, 记录 bin-log 指针位置并导出数据
flush tables with read lock;
show master status;
记录下来 show 命令的输出的 <log file> <position> 后面有用. 然后使用 mysqldump 导出数据的快照, 用另一个会话, 前面那个不要关, 否则锁定状态就失效了, 到导致数据被更新而不一致.
mysqldump –all-databases > all.sql
可以利用 md5 来验证一下磁盘上的快照文件是否有瑕疵
mysqldump –all-databases | tee all.sql | md5
md5 all.sql
5, 主数据库上的操作完成了, 解锁, 恢复上线:
unlock tables;
6, 确定从数据库还没有打开”从属”模式, 然后导入数据快照(我喜欢用pv查看进展)
slave stop;
pv -p all.sql | mysql
7, 告诉从数据库, 它的主库在哪里
change master to master_host=<host>, master_user=’repl’, master_password='<pass>’, master_log_file='<log file>’, master_log_pos=<position>, …
start slave;
8, 监视日志文件, 看看是否存在错误
tail -f /var/log/daemon.log
另外可以测试一下在主数据库里做的更新会不会出现在从数据库里面. 🙂
PS. 在 Debian + MySQL 5.5 上实验成功, 但以上笔记是过后补写的, 如有错误, 欢迎指出.
PPS. 来自 MySQL 娘家的参考 http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html
2 responses to “小试分身 MySQL Replication”
七 绝
严谨治学不畏难,
妙笔耕耘新金山。
长风破浪待今日,
直济沧海挂云帆。
Study was so hard and rigorous,
Seriously writing in Melbourne.
Brave the wind and waves today,
With great speed sail on the ocean.
Author: Xu Zhaolin
On December 1, 2012
[…] 小试分身 MySQL Replication, 上次是按照 MySQL 教程做的, 比较死板(或者说, 安全), 但需要锁住数据库, […]