热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql主从强制同步_MySQL主从同步架构中你不知道的“坑”(上)

以下操作针对指定不同步库binlog-formatROW模式查看主从的binlog模式mysqlshowslavestatus\G***********************1

以下操作针对指定不同步库

binlog-format=ROW模式

查看主从的binlog模式

59828cf89eace2e03834ae82acd848eb.png

029221f8cc918c231621762e7e99f01f.png

mysql> show slave status\G

*********************** 1. row *************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.22.171

Master_User: rep

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master-bin.000004

Read_Master_Log_Pos: 463

Relay_Log_File: s1.000011

Relay_Log_Pos: 630

Relay_Master_Log_File: master-bin.000004

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB: test

查看从库状态也显示此项配置

1:在忽略不同步的库不存在的情况下

在配置文件指定主从库都不存在的库,然后在主库中创建这个库,测试数据是否同步过去

主库创建数据库

mysql> create database test;

Query OK, 1 row affected (0.06 sec)

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| performance_schema |

| sys |

| test |

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

5 rows in set (0.01 sec)

从库查看

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| performance_schema |

| sys |

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

5 rows in set (0.01 sec)

结论:发现建库的动作没有被从库同步过来

2:测试主从服务器库存在数据同步情况

目前主从库都存在库test001

[root@mysql-m ~]# mysql -uroot -p -e "show databases;"|grep test001

Enter password:

test001

[root@mysql-s ~]# mysql -uroot -p -e "show databases;"|grep test001

Enter password:

test001

在主库插入数据测试从库同步情况

mysql> use test001;

Database changed

mysql> create table test (

-> id varchar(10) not null,

-> name varchar(10) not null

-> );

Query OK, 0 rows affected (0.06 sec)

mysql> insert into test values('zhang','man');

Query OK, 1 row affected (0.03 sec)

mysql> select * from test;

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

| id | name |

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

| zhang | man |

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

1 row in set (0.00 sec)

mysql> select * from test001.test;

ERROR 1146 (42S02): Table 'test001.test' doesn't exist

mysql> use test001;

Database changed

mysql> show tables;

Empty set (0.00 sec)

结论:从库没有表,同样也有数据同步过来

3:征对数据库默认的库同步(如mysql)

replicate-ignore-db = mysql

#忽略指定不同步的库

测试前的数据

[root@mysql-m ~]# mysql -uroot -p -e "select user,host from mysql.user;"

Enter password:

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

| user | host |

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

| mysql.sys | localhost |

| root | localhost |

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

[root@mysql-s ~]# mysql -uroot -p -e "select user,host from mysql.user;"

Enter password:

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

| user | host |

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

| mysql.sys | localhost |

| root | localhost |

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

[root@mysql-m ~]# mysql -uroot -p -e "grant all privileges on *.* to test@localhost identified by '123456';"

Enter password:

[root@mysql-m ~]# mysql -uroot -p -e "select user,host from mysql.user;"

Enter password:

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

| user | host |

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

| mysql.sys | localhost |

| root | localhost |

| test | localhost |

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

[root@mysql-s ~]# mysql -uroot -p -e "select user,host from mysql.user;"

Enter password:

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

| user | host |

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

| mysql.sys | localhost |

| root | localhost |

| test | localhost |

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

结论:此种模式下此配置对默认的库不生效,因此调整配置

replicate-ignore-db = mysql

#忽略指定不同步的库

replicate-wild-ignore-table=mysql.%

#忽略指定不同步的库的所有表

[root@mysql-m ~]# mysql -uroot -p -e "grant all privileges on *.* to testuser@localhost identified by '123456';"

Enter password:

[root@mysql-m ~]# mysql -uroot -p -e "select user,host from mysql.user;"

Enter password:

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

| user | host |

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

| mysql.sys | localhost |

| root | localhost |

| test | localhost |

| testuser | localhost |

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

[root@mysql-s ~]# mysql -uroot -p -e "select user,host from mysql.user;"

Enter password:

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

| user | host |

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

| mysql.sys | localhost |

| root | localhost |

| test | localhost |

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

结论:此种模式下此配置对默认的库进行不同步数据库,需要增加相关表的参数,最后测试得出不加replicate-ignore-db = mysql参数,同样对默认的库生效,

binlog-format=STATEMENT模式

修改主从库的binlog模式

17a81749bb65cfa50771d579b1664852.png

31710f7f7c606af9e928d9bbb8ceeedd.png

一起测试不存在的库、存在的库与默认库

replicate-ignore-db = test

#忽略指定不同步的库(主从不存在)

replicate-ignore-db = test001

#忽略指定不同步的库

replicate-wild-ignore-table=mysql.%

#忽略指定不同步的库的所有表

1:测试默认库数据同步

mysql> grant all privileges on *.* to user@'localhost' identified by '123456';

Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> select user,host from mysql.user;

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

| user | host |

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

| rep | % |

| mysql.sys | localhost |

| root | localhost |

| test | localhost |

| user | localhost |

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

5 rows in set (0.01 sec)

[root@mysql-s ~]# mysql -uroot -p -e "select user,host from mysql.user;"

Enter password:

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

| user | host |

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

| rep | % |

| mysql.sys | localhost |

| root | localhost |

| test | localhost |

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

结论:在此种模式下,对于默认的库,配置replicate-ignore-db = mysql,对默认的库与库中的表都生效

2:测试主从服务器库已经同步的情况下数据同步(test001)

64456be8c332ae7a7e02ac224b14f30c.png

672d6dcd481e536d2fe62c8760bd89e7.png

mysql> use test001;

Database changed

mysql> create table test001 (

-> id varchar(10) not null,

-> name varchar(10) not null

-> );

Query OK, 0 rows affected (0.06 sec)

mysql> insert into test001 values('zhang','man');

Query OK, 1 row affected (0.11 sec)

[root@mysql-m ~]# mysql -uroot -p -e "select * from test001.test001;"

Enter password:

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

| id | name |

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

| zhang | man |

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

[root@mysql-s ~]# mysql -uroot -p -e "select * from test001.test001;"

Enter password:

ERROR 1146 (42S02) at line 1: Table 'test001.test001' doesn't exist

点击-->



推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
author-avatar
虎仔球妈_459
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有