mysql主从复制,要主库和从库表结构一致才能复制吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql主从复制,要主库和从库表结构一致才能复制吗相关的知识,希望对你有一定的参考价值。

参考技术A 版本一致,是官方推荐的方式;slave至少要和master的版本前两个号相同,可高于master;
版本不一致,可能出现的问题就是同步的不稳定(兼容性的老问题),因为会在某些函数处理、日志读取、日志的解析重演等上发生异常,导致同步报错而需手工处理。本回答被提问者采纳
参考技术B 首先有主库,从库通过读取主库的binlog执行相应的sql,故会和主库数据库表结构一致
不仅row能同步,创建表也能同步,不需要从库创建表。
你就想象从主库执行一个sql,从库也执行一个相同的sql
如果非要在从库增加一个主库没有的字段,也是可以同步的,只要保证主库的sql语句在从库表也能正常执行

MySQL主从同步

多实例MySQL主从复制:

主库Master 3306
从库Slave 3307
IP : 10.0.0.120

一,创建复制账号

1,在主库和从库(为了集群纵向扩展用)上都添加用于主从复制的账号

grant replication slave on *.* to 'rep'@'10.0.0.%' identified by '123Qwe';

二,配置主库和从库

2,在主库上设置server-id,并开启binlog日志,
在/3306/my.cnf中

log-bin = /data/3306/mysql-bin
server-id=1

3,为了防止数据持续写入,对主库进行锁表。

flush table with read lock;

首先把主库中的数据备份导入到从库中,为了防止数据不一致的情况,给主库加锁,不让用户写入数据
4,查看当前主库的状态

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |     3533 |              |                  |
+------------------+----------+--------------+------------------+

5,备份主库的数据,并把数据导入到从库中

mysqldump -uroot -p123456 -S /data/3306/mysql.sock -A -B --events --master-data=2 >/home/hejian/rep.sql
mysql -uroot -p123456 -S /data/3307/mysql.sock < /home/hejian/rep.sql

6,备份完之后给主库的表解锁

unlock tables;

7,登录从库服务器的mysql,查看从库服务状态

show slave status\G;

8,停止从库

stop slave;

9,在从库中写入到master.info里

CHANGE MASTER TO
MASTER_HOST='10.0.0.120',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='123qwe',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=3533;

10,打开从库

slave start;

11,查看线程运行状态:

show processlist\G

以上是关于mysql主从复制,要主库和从库表结构一致才能复制吗的主要内容,如果未能解决你的问题,请参考以下文章

MySQL主从同步

mysql主从复制

MySQL主从复制半同步复制原理及搭建

mysql主从复制原理

Linux mysql 5.7.23 主从复制(异步复制)

redis主从