那什么,网站在日本,数据库在新加坡,然后吧,网站与数据库之间通信延时 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标识, 不能重复
<br>log-bin = mysql-bin        #日志文件名
<br>auto_increment_increment=2 #自动增长的步长 解决多个主机自动增长出现重复问题 这个主机使用奇数值 另外一个主机使用偶数值  
<br>auto_increment_offset=1    #自动增长的起始数值
<br>binlog-do-db=testdb        #指定需要日志的数据库,多个加一行,不需要就注释
<br>binlog-ignore-db = db_name #指定不需要日志的数据库,多个加一行,不需要就注释
<br>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;

显示类似如下:


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

7, 从端导入数据库

mysql -u root -p < sync.sql

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


server-id = 2
<br>auto_increment_increment=3  
<br>auto_increment_offset=1
<br>#其余项目与服务端一致就可以了, 完了重启 MariaDB

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


MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='master.host.name',\  #主服务器主机名称
<br>    -> MASTER_USER='sync_account',\                                  #用于复制的用户
<br>    -> MASTER_PASSWORD='12345',\                                     #复制用户的密码
<br>    -> MASTER_PORT=3306,\                                            #连接使用的端口
<br>    -> MASTER_LOG_FILE='mysql-bin.000013',\                          #起点日志文件
<br>    -> MASTER_LOG_POS=1714336,\                                      #起点位置
<br>    -> MASTER_CONNECT_RETRY=10,\                                     #连接重试间隔
<br>    -> MASTER_HEARTBEAT_PERIOD=2;                                    #心跳间隔时间

10, 启动从端数据库同步

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

11, 查看同步信息


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

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

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

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据