针对这个问题,我会提供一个完整的攻略以指导Linux下如何实现MySQL数据库主主同步配置。步骤如下:
准备工作
- 确认MySQL版本一致性,要求两个MySQL实例的版本必须一致。
- 开启MySQL二进制日志,可以通过修改my.cnf配置文件,将以下参数加入到[mysqld]组中:log-bin=mysql-bin
步骤一:创建复制账户并授权
在两个MySQL实例中,分别创建出用于复制的账户,并授权该账户拥有复制权限,示例代码如下:
GRANT REPLICATION SLAVE ON *.* TO 'replicant'@'%' IDENTIFIED BY 'password';
步骤二:重启MySQL实例
完成上述操作后,需要重启MySQL实例。
步骤三:开启主库复制日志并获得坐标点
执行以下命令,开启主库的复制日志并获取坐标点,示例代码如下:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
步骤四:在从库上配置主库信息
在从库上配置要连接的主库的信息,示例代码如下:
CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='replicant', MASTER_PASSWORD='password', MASTER_LOG_FILE='recorded_file_name', MASTER_LOG_POS=recorded_position;
步骤五:启动从库复制
在从库上启动复制进程,并检查复制状态是否正常:
START SLAVE;
SHOW SLAVE STATUS\G;
示例
以假设我们已经在两个MySQL实例中创建了名为test
的数据库举例,这个数据库已有一张表t1
。
示例一
- 在主库上创建
test.t1
表:
CREATE TABLE test.t1 (id INT PRIMARY KEY) ENGINE=InnoDB;
- 向
t1
表中插入一条数据:
INSERT INTO test.t1 VALUES (1);
- 在从库上查询
t1
表,结果如下:
mysql> SELECT * FROM test.t1;
+----+
| id |
+----+
| 1 |
+----+
可以看到,从库已经同步了主库上的数据。
示例二
- 在主库上向
t1
表中插入一条数据:
INSERT INTO test.t1 VALUES (2);
- 在从库上向
t1
表中插入一条数据:
INSERT INTO test.t1 VALUES (3);
- 在从库上再次查询
t1
表,结果如下:
mysql> SELECT * FROM test.t1;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
可以看到,从库同步了主库上插入的id=2
的数据,但由于在从库上也插入了一条id=3
的数据,所有从库中存在两条id=3
的数据。
注意:这种情况需要手动解决,可使用mysqlbinlog
命令将主库的binlog文件导出,然后结合从库的binlog文件手动进行数据合并。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux下指定mysql数据库数据配置主主同步的实例 - Python技术站