Total Pageviews

Wednesday, 16 November 2011

配置MySQL的Replication功能

MySQL的Replication功能可以自动同步主MySQL服务器的更新到若干个辅MySQL服务器上,这个功能能把MySQL的数据实时分布到多台机器上,提交了MySQL的数据安全性。
配置MySQL Replication并不是个简单的工作,如果配置的不好,回导致MySQL的同步性能不好,或者不能同步,甚至导致主辅服务器的数据不一致。
下面主服务器为master,辅助服务器为slave

master的配置

第一步保证master能单机正常工作,略。
在master上创建一个MySQL用户,这个用户专门用于Replication:
grant replication slave on *.* to 'repluser'@'%' identified by 'mypassword';
编辑MySQL的配置文件,允许log-bin,并且给master分配一个ID:
[mysqld]
skip-name-resolve
server-id=10
log-bin=mysql-bin
sync_binlog=1
innodb_flush_logs_at_trx_commit=1
innodb_support_xa=1

slave的配置

配置ID等
[mysqld]
server-id=20
log_bin = mysql-bin
relay_log = mysql-relay-bin
skip_slave_start
log_slave_updates = 1
read_only
skip-name-resolve

同步数据

在master上把数据导出,并记录当前数据位置。用一个用户连接mysql并运行:
flush tables with read lock;
show master status;

然后该连接不要退出,否则read lock就失效了,记录下当前日志的文件名和位置。在另外一个窗口运行如下命令导出数据:
mysqldump -uroot -p  --all-databases |gzip -c > db.sql.gz
然后把数据文件拷贝到slave上,解压缩:
gunzip db.sql.gz
进MySQL导入:
source db.sql;
这时候slave上的数据已经同步到master的导出时刻的数据了,下面就启动自动同步的线程就可以了:
change master to master_host='1.1.1.1', master_user='repluser', aster_password='mypassword',master_log_file='mysql-bin.000006',master_log_pos=502185;
show slave status;
start slave;

show slave status;
从上面的 show slave status命令的输出可以看到, IO线程和SQL线程都开始工作了。过几分钟后比较一下slave和master上的日志文件及其位置,应该就是一样的了。

注意事项

  • 应用程序不要使用数据库的root用户,一定要创建普通用户供程序使用,因为root用户可以在slave上进行写操作,容易导致数据不一致。
------------------------------------------------------------------------------------------------


MySQL 支持一种叫复制(replication)的特性,作用是可以将MySQL主服务器数据(Master)异步复制到MySQL从服务器(Slave),以实现多台服务器数据的实时同步。
MySQL Replication 详细配置请参考官方手册:《MySQL中的复制》《Replication》

一、MySQL主复制配置

1、清理MySQL日志

1
2
3
mysql>show BINARY logs;
mysql>purge BINARY logs TO 'mysql-bin.000325';
mysql>FLUSH LOGS;

2、锁表、获取主复制日志名和偏移量

1
2
3
mysql>FLUSH TABLES WITH READ LOCK;
mysql>show master STATUS\G
mysql>UNLOCK TABLES;
打包MySQL数据,并传送到从服务器
1
2
3
cd /usr/local/mysql/data
tar -cvf /tmp/mysql-snapshot.tar .
scp /tmp/mysql-snapshot.tar root@176.32.85.16:/tmp

3、创建从复制连接用户

注意修改默认用户名:repl、密码:slavepass
1
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';

4、MySQL配置文件

1
2
3
4
5
6
7
[mysqld]  
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
binlog-ignore-db=phpmyadmin
innodb_flush_log_at_trx_commit=1
slave-skip-errors=all
配置主-主服务器时必须额外使用下面选项:
1
2
3
4
log-slave-updates
sync_binlog=1
auto_increment_offset=2
auto_increment_increment=1

二、MySQL从复制配置

1、还原数据快照

1
2
cd /usr/local/mysql/data
tar -xvf /tmp/mysql-snapshot.tar

2、配置主服务器信息

1
2
3
4
5
6
CHANGE MASTER TO
MASTER_HOST='106.187.38.210',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1579;

3、启动从复制进程、查看状态。

1
2
mysql>start slave;
mysql>SHOW SLAVE STATUS\G;
注:上面所有操作都是可以在phpMyadmin中以图形化方式完成.

    No comments:

    Post a Comment