Jan
15
2009

搭建mysql master-slave replication

本篇文章记录了如何搭建一个master-slave架构的mysql数据库服务器,一般用于读写分离的场景下:master for INSERT/UPDATE/DELETE,slave for SELECT。
根据实战结果,在master-connect-retry=5的情况下,基本可以做到读写同步(可以打开slave的log文件来观察同步结果:tail -f /var/run/mysql/mysql.log)

基本信息

主库:192.168.1.1
从库:192.168.1.2
数据文件存放位置:/data/mysql
待同步数据库:除了mysql、test库以外的所有数据库

一、设置MASTER

1、修改my.cnf

#vi /etc/my.cnf
server-id=1
log-bin
binlog-ignore-db=mysql
binlog-ignore-db=test

2、赋予SLAVE权限帐号,允许用户在MASTER上LOAD TABLE和LOAD DATA

mysql> GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO slave@192.168.1.2 IDENTIFIED BY ‘password’; 

3、锁主库表 

mysql> FLUSH TABLES WITH READ LOCK; 

4、显示主库信息

记录File和Position,从库设置将会用到

mysql> SHOW MASTER STATUS;
+—————+———-+————–+——————+
| File          | Position | Binlog_do_db | Binlog_ignore_db |
+—————+———-+————–+——————+
| hathor-bin.001 | 79   |              | mysql,test         |
+—————+———-+————–+——————+

5、打包主库 

# cd /data
# tar cvfz db.tar.gz db/ 

二、设置SLAVE

1、把数据库文件部署到slave服务器

# cd /data
# scp 192.168.1.1:/data/db.tar.gz
# tar xvfz db.tar.gz

2、解锁主库表 

mysql> UNLOCK TABLES; 

3、查看修改数据库文件夹权限 

# chown mysql:mysql syncdb -R

4、修改my.cnf 

# vi /etc/my.cnf 
server-id=2
master-host=192.168.1.1
master-user=slave
master-password=password
master-port=3306
#Controls the retry interval. The default is 60 seconds.
master-connect-retry=5

Trouble Shoot

Mysql 5到这一步一般就ok了,如果遇到问题再看下面的

如果报错跟Position相关的错误,再手动设置一下File/Position信息
设置连接MASTER MASTER_LOG_FILE为主库的File,MASTER_LOG_POS为主库的Position

mysql> CHANGE MASTER TO MASTER_HOST=’192.168.1.1′,
MASTER_USER=’slave’,
MASTER_PASSWORD=’password’,
MASTER_LOG_FILE=’mysql-bin.001′,
MASTER_LOG_POS=79;

启动SLAVE服务

mysql> slave start;

查看SLAVE状态 

mysql> SHOW SLAVE STATUS; 

Q:为何找不到binlog文件?
A:mysql会把binlog、log、errorlog放在与–pid-file相同的目录

Written by mic in: TechNote | 标签:,

1条评论

  • mantian

    非常好

    条评论 | 01月 15, 2009

RSS feed for comments on this post.

抱歉,评论已被关闭。

Powered by WordPress. Theme: TheBuckmaker. Kreditvergleich, Streaming Audio

MC Inside