记录基于binlog的MySQL主从服务器配置过程。
整体步骤
*主数据库:
- 修改配置文件:开启binlog、设置server-id,然后重启数据库;
- 创建用于同步的数据库用户;
- 导出数据库。
从数据库:
- 修改配置文件:设置server-id,然后重启数据库;
- 导入数据到到从库;
- 配置主数据库地址、用户名、密码;
- 启用同步。
详细步骤
主数据库配置
查看主数据库是否开启binlog:
1
2
3
4
5
6
7mysql> show variables like "%log_bin%";
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| ...... | ... |
+---------------------------------+-------+默认是关闭的。
修改配置文件,开启binlog,并配置server-id:
1
2server-id = 1
log_bin = /var/log/mysql/mysql-bin.logserver-id
是一个正整数,要求每台数据库都不一样即可。log_bin
的值是一个路径,表示binlog文件的保存位置。
保存配置后重启数据库,然后再次查看binlog是否开启:
1
2
3
4
5
6
7
8
9
10
11
12
13mysql> show variables like "%log_bin%";
+---------------------------------+--------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------+
| log_bin | ON |
| log_bin_basename | /var/log/mysql/mysql-bin |
| log_bin_compress | OFF |
| log_bin_compress_min_len | 256 |
| log_bin_index | /var/log/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| sql_log_bin | ON |
+---------------------------------+--------------------------------+
7 rows in set (0.00 sec)log_bin
是ON表示binlog已经开启。创建用于同步数据的用户。在主数据库执行:
1
2create user 'repl'@'172.17.0.%' identified by '123123';
grant REPLICATION SLAVE on *.* to 'repl'@'172.17.0.%';这个用户只需要
REPLICATION SLAVE
权限即可。
- 导出数据库:参数中包含
1
mysqldump -h 127.0.0.1 -u root -p --databases study --master-data > study.sql
--master-data
,导出的sql文件会记录binlog文件名和位置。例如:1
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=2273;
从数据库配置
配置server-id:
1
server-id = 2
注:从库可以不启用binlog。
重启从数据库。
创建数据库并导入从主库导出的数据:
1
source study.sql;
配置主数据库的地址、账号和密码:
1
change master to MASTER_HOST='172.17.0.6', MASTER_USER='repl', MASTER_PASSWORD='123123';
注:不用写binlog的文件名和位置,因为导出的sql已经包含了。
- 开启同步:完事~
1
start slave;
现在在主库增加删除修改数据,从库会自动同步。如果没有,可以看看从库状态,会有提示:1
show slave status\G;