MySQL主从复制配置

主库配置

1.配置mysql
vim /etc/my.cnf  
# 在文件中增加以下内容
server-id=1  # 保证server id唯一  
log-bin = /mnt/mysql/log/mysql-bin.log  
binlog-do-db = db1  
binlog-do-db = db2  

  其中db1和db2是计划进行主从复制的库,如果有多个,写多行即可。配置完毕后,重启数据库服务:

service mysqld restart  
2.添加复制用户

登陆MySQL,添加同步用户,并授予REPLICATION SLAVE权限。

GRANT USAGE ON *.* to sst@'%' IDENTIFIED BY 'xxxxxxxx';  
GRANT ALL PRIVILEGES on *.* to sst@'%';  
FLUSH PRIVILEGES;  
3.dump数据
mysqldump -uroot -p db1 > db1.sql  
4.查看二进制文件位置

使用root身份登录mysql,查看master状态:

show master status;  

会有类似如下格式的输出:

+-----------------+-----------+----------------+------------------+
| File            | Position  | Binlog_Do_DB   | Binlog_Ignore_DB |
+-----------------+-----------+----------------+------------------+
| mysql-bin.00001 | 445       | db1,db2        |                  |
+-----------------+-----------+----------------+------------------+
1 row in set (0.00 sec)  

特别需要记住输出中的 file 和 position 的值。

从库配置

1.新建数据库

在从库上建立相同名称的数据库。

2.配置从数据库
vim /etc/my.cnf  
# 在my.cnf中增加以下内容:
server-id = 2 # 保证id唯一  
relay-log = /mnt/mysql/log/mysql-relay-bin.log  
replicate-wild-do-table = db1.%  
replicate-wild-do-table = db2.%  
3.导入数据
mysql -uroot -p db1 < db1.sql  
4.配置主从同步

登录到mysql服务器,配置同步的主服务器信息:

> change master to master_host='xxx.xxx.xx.xx',
> master_user='sst',
> master_password='password',
> master_log_file='mysql-bin.00000x',
> master_log_pos=xxxx;

配置好后启动主从同步: start slave。然后通过命令查看状态: show slave status,如果成功slave_io_running和slave_sql_running两项应该都是yes