mysql8 主从同步

傻逼CSDN在markdown的预览模式把我英文引号给转成中文引号了。

算标题党一回,其实 mysql8 的主从同步跟 mysql5.7 的没有什么不同

master 端配置

配置文件 vim /etc/my.cnf
[mysqld]

# 日志文件名

log-bin = mysql-bin

# 要同步的数据库

binlog-do-db = my_db_name

# 主数据库端ID号

server-id = 1

# 跳过checksum的事件

binlog_checksum = none

然后重启

创建slave账号

# grant replication slave on . to ‘slave’@’%’ identified by ‘xxxxxx’;

# flush privileges;

查看master状态

# show master status;
记住File和position的值,将这里的值再下面的sql中执行

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000013 |      150 | octopus      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+




slave 端配置

配置文件 vim /etc/my.cnf
[mysqld]

# 主数据库ID号

server-id = 2

slave_sql_verify_checksum = NONE

replicate-do-db = my_db_name

#replicate-rewrite-db = my_db_name -> new_db_name

然后重启

执行同步命令,设置主数据库ip,同步帐号密码,同步位置

# change master to master_host=‘120.77.xx.xx’,master_user=‘slave’,master_password=‘xxxxxx’,master_log_file=‘mysql-bin.000013’,master_log_pos=150;

开启同步功能

# start slave;

查看同步状态

# show slave status\G;
需要slave_io_runing和slave_sql_runing都是Yes,表示成功





注意事项1:

  1. 如果主库已经投入使用了,此时如果需要主从同步。需要提前在某个时刻,执行 show master status; 然后记下 File 和 Position。这是主库当前的 sql 执行进度。
  2. 使用命令行或者客户端(这里我使用的是 Navicat 的 Dump SQL File),导出所有表结构+数据。然后把这里 SQL 在从库中执行。
  3. 在从库中,使用 change master to…语句把进度指向刚才记录下的 File 和 Position 位置。然后开启 start slave;

注意事项2:

对于主从同步,不同数据库名,网上搜索到的方法是在从库配置文件 /etc/my.cnf 使用「replicate-rewrite-db = my_db_name -> new_db_name」替代「replicate-do-db = my_db_name」。
实际操作中,对于表数据的增删改查可以运行成功。
但是如果涉及修改表结构语句,同步时候会报错,比如:

Error 'Table 'my_db_name.table_name' doesn't exist' on query. Default database: 'new_db_name'. Query: 'ALTER TABLE `my_db_name`.`table_name`
MODIFY COLUMN `type` int(12) UNSIGNED NOT NULL COMMENT '类型' AFTER `name`'

因为这里修改表结构会带上数据库的名字,如 「ALTER TABLE my_db_name.table_name…」
看来这个配置并不能全方位的生效啊。

你可能感兴趣的:(服务器)