MariaDB 的双主复制配置过程

Linux Mar 10, 2017

本文环境

  • Debian 8
  • MariaDB 10.1.21

配置文件 1

修改服务器 1 上 mysql 配置文件 /etc/mysql/my.cnf

有些配置默认就存在的,如果你有洁癖,请先搜索,再添加配置项。

[mysqld]
server-id               = 1
log_bin                 = /var/log/mysql/mariadb-bin
log_bin_index           = /var/log/mysql/mariadb-bin.index
binlog-do-db	        	= tudou1 #需要同步的数据库,这里同步tudou1和tudou2两个数据库
binlog-do-db	        	= tudou2
binlog-ignore-db      	= mysql  #忽略同步的数据库
log_slave_updates						     #把从库的写操作记录到binlog中 (缺少之后,双主创建失败)
expire_logs_days	= 365				   #日志文件过期天数,默认是 0,表示不过期
auto_increment_increment= 2			 #设定为主服务器的数量,防止auto_increment字段重复
auto_increment_offset	= 1				 #自增长字段的初始值,在多台master环境下,不会出现自增长ID重复

配置文件 2

[mysqld]
[mysqld]
server-id               = 2
log_bin                 = /var/log/mysql/mariadb-bin
log_bin_index           = /var/log/mysql/mariadb-bin.index
binlog-do-db	        = tudou1 #需要同步的数据库,这里同步tudou1和tudou2两个数据库
binlog-do-db	        = tudou2
binlog-ignore-db      	= mysql  #忽略同步的数据库
log_slave_updates						     #把从库的写操作记录到binlog中 (缺少之后,双主创建失败)
expire_logs_days	= 365				   #日志文件过期天数,默认是 0,表示不过期
auto_increment_increment= 2			 #设定为主服务器的数量,防止auto_increment字段重复
auto_increment_offset	= 2				 #自增长字段的初始值,在多台master环境下,不会出现自增长ID重复

注意:

  • log-slave-updates 表示把从库的写操作记录到binlog中,缺少之后,双主创建失败。双主同步时该项必须有
  • binlog-do-db 需要同步的数据库,可写多个
  • binlog-ignore-db 表示忽略同步的数据库

创建同步账户

// 服务器 1

GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'server-2' IDENTIFIED BY 'repuser';
FLUSH PRIVILEGES;

// 服务器 2
GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'server-1' IDENTIFIED BY 'repuser';
FLUSH PRIVILEGES;

可以顺便在另一台服务器测试能不能登录,如果不能,把 bind-address 那行注释掉即可。

$ mysql -urepuser -prepuser -hserver-1

查看 master 状态

服务器 1 中

MariaDB [mysql]> show master status;
+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000514 |      639 | xxxxxxxx     | mysql            |
+--------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

服务器 2 中

MariaDB [mysql]> show master status;
+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000006 |     1057 | xxxxxxxx     | mysql            |
+--------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

设置同步

// 服务器 2

MariaDB [mysql]> CHANGE MASTER TO MASTER_HOST='server-1',MASTER_PORT=3306,MASTER_USER='repuser',MASTER_PASSWORD='repuser',MASTER_LOG_FILE='mariadb-bin.000514',MASTER_LOG_POS=639;

MariaDB [mysql]> START SLAVE;

// 服务器 1

MariaDB [mysql]> CHANGE MASTER TO MASTER_HOST='server-2',MASTER_PORT=3306,MASTER_USER='repuser',MASTER_PASSWORD='repuser',MASTER_LOG_FILE='mariadb-bin.000006',MASTER_LOG_POS=1057;

MariaDB [mysql]> START SLAVE;

// 完毕之后,分别执行

MariaDB [mysql]> SHOW SLAVE STATUS\G

如出现以下两项,则说明配置成功!

             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

双主同步测试

在服务器 1 数据库中创建一个表,看看服务器 2 会不会出现,按照上面教程,如果没问题的话,就是可以同步的。

References

Tags

Jie Li

🚘 On-road / 📉 US Stock / 💻 Full Stack Developer / 🎓 Grad Student / ®️ ENTJ

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.