MariaDB 主从数据库同步

那什么,网站在日本,数据库在新加坡,然后吧,网站与数据库之间通信延时 100ms 左右,导致网站打开比较慢,嗯,这不为了提高体验,就折腾了一下同步的事情。

1,环境:
OS: CentOS 7.4 x64
DB: MariaDB 5.5.56

2, 服务端新建一个用于同步的用户:

MariaDB [(none)]> GRANT FILE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'sync_account'@'%' IDENTIFIED BY '123456';

3, 修改服务端 my.cnf 配置文件:


server-id = 1              #Server标识, 不能重复

log-bin = mysql-bin #日志文件名
auto_increment_increment=2 #自动增长的步长 解决多个主机自动增长出现重复问题 这个主机使用奇数值 另外一个主机使用偶数值
auto_increment_offset=1 #自动增长的起始数值
binlog-do-db=testdb #指定需要日志的数据库,多个加一行,不需要就注释
binlog-ignore-db = db_name #指定不需要日志的数据库,多个加一行,不需要就注释
replicate-do-db = testdb #指定从端需要同步的数据库,多个加一行,不需要就注释

4,重启 MariaDB:

service mariadb restart

配置过程中为了防止突然的主机数据写入 导致配置主从失败 可以将机器锁定只允许读 注意千万不要将从机配成锁定 否则无法同步数据了

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;

配置完从端解锁:

MariaDB [(none)]> UNLOCK TABLES;

5, 备份数据库:

mysql -u root -p --quick --all-databases --flush-logs --delete-master-logs --single-transaction > sync.sql

6, 查看服务端状态

MariaDB [(none)]> SHOW MASTER STATUS;

显示类似如下:


+------------------+----------+-------------------------------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+-------------------------------------+------------------+
| mysql-bin.000013 | 1714336 | testdb | |
+------------------+----------+-------------------------------------+------------------+
1 row in set (0.00 sec)

7, 从端导入数据库

mysql -u root -p < sync.sql

8, 修改从端 my.cnf 配置文件:


server-id = 2

auto_increment_increment=3
auto_increment_offset=1
#其余项目与服务端一致就可以了, 完了重启 MariaDB

9,配置从端主服务器信息:


MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='master.host.name',\  #主服务器主机名称

-> MASTER_USER='sync_account',\ #用于复制的用户
-> MASTER_PASSWORD='12345',\ #复制用户的密码
-> MASTER_PORT=3306,\ #连接使用的端口
-> MASTER_LOG_FILE='mysql-bin.000013',\ #起点日志文件
-> MASTER_LOG_POS=1714336,\ #起点位置
-> MASTER_CONNECT_RETRY=10,\ #连接重试间隔
-> MASTER_HEARTBEAT_PERIOD=2; #心跳间隔时间

10, 启动从端数据库同步

MariaDB [(none)]> START SLAVE;                            #启动同步进程

11, 查看同步信息


MariaDB [(none)]> SHOW SLAVE STATUS\G                     #查看从服务器线程的关键参数的信息

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master
Master_User: backup1 #被用于连接主服务器的当前用户
Master_Port: 3306
Connect_Retry: 10 #连接重试间隔
Master_Log_File: mysql-bin.000003 #I/O线程当前正在读取的主服务器二进制日志文件的名称
Read_Master_Log_Pos: 1832 #在当前的主服务器二进制日志中,I/O线程已经读取的位置
Relay_Log_File: relay-bin.000003 #SQL线程当前正在读取和执行的中继日志文件的名称
Relay_Log_Pos: 529 #在当前的中继日志中,SQL线程已读取和执行的位置
Relay_Master_Log_File: mysql-bin.000003 #由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称
Slave_IO_Running: Yes #I/O线程是否被启动并成功地连接到主服务器上
Slave_SQL_Running: Yes #SQL线程是否被启动
...
Master_Server_Id: 2

12, 查看从端 MASTER 状态,然后在主端启动服务器同步就可以实现相互同步了。

参考:
1, MySQL数据库设置主从同步
2, 实现两个Mysql数据库之间的主从同步
3, mariadb配置双主多从
4, MariaDB主从同步
5, MySQL Documentation

Categories: 云端新技能

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.