[MYSQL] 搭建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相同的 目录
根据实战结果,在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相同的 目录