美文网首页
Mysql 单表主从同步

Mysql 单表主从同步

作者: yichen_china | 来源:发表于2021-10-15 08:54 被阅读0次

先配主从同步,后将主库表老数据传输到从库

说明:api-server的数据库为主,其他harbor为从

1.master
配置文件更改

[mysqld]

log-bin = mysql-bin
server-id = 1   //保证其他mysql不占用

创建用户

grant replication slave,replication client on *.* to slave@'*' identified by "123456";

查看master二进制文件信息,并记录file和position

show master status

2.slave
配置文件修改

[mysqld]

server-id = 2
log-bin=mysql-bin #开始bin-log日志
master-host = 192.168.0.43 #主数据库地址
master-user = 'slaveuser' #执行登录用户
master-password = 'password' #执行密码
master-port = 3306 #默认端口
report-host = net-app1
master-connect-retry = 30 # 如果从服务器发现主服务器断掉重新连接时间30S

expire_logs_days = 3 #保留3天的日志文件
log-slave-updates
replicate-do-table=hrsoft_share.表名# 只复制表名表
如果要是复制多个表只要在下面直接添加(复制几个就添加几个)
replicate-do-table=hrsoft_share.表名
slave-skip-errors = all   #跳过所有的错误错误,继续执行复制操作
进如msyql命令行模式
CHANGE MASTER TO
-> MASTER_HOST='master_host_name',     //主数据库地址
-> MASTER_USER='replication_user_name', //上面为同步创建的用户
-> MASTER_PASSWORD='replication_password', //密码
-> MASTER_LOG_FILE='recorded_log_file_name', // 上面查看二进制文件记录的file
-> MASTER_LOG_POS='recorded_log_pos'; //上面查看的position

启动从模式 start slave;(启动之前可以reset slave)

 show slave status\G;
            Slave_IO_Running: Yes     
            Slave_SQL_Running: Yes    
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table: registry.user  //同步的表 例如:tenxcloud_2_0.tenx_users

坑1:

Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size'

从MySQL5.6开始引入了binlog_checksum全局变量,即MySQL会将event的CRC32校验值也写入binlog,显然MariaDB在分析日志的时候不会考虑该信息,导致解析出错。

解决方法:关闭主库的CRC校验,修改全局变量

在主库中 1 show variables like '%binlog%'; 2 set global binlog_checksum=NONE;

坑2:

我之前使用的MySQL5.5与MariaDB10.2版本相差过大,导致设置同步的过程中一直出现“Relay log write failure: could not queue event from master”的问题,所以升级了MySQL,这个问题得到解决。

解决这些问题就能实现MySQL到MariaDB的主从同步了,但是需要注意的是,主从同步的数据库只能使用同种引擎,一般就是无脑InnoDB,本来想使用MariaDB的columnStore列存储引擎,但由于主库使用的InnoDB,结果数据并没有同步。而两者都是InnoDB则实现了同步。

感谢避坑 https://blog.csdn.net/ysaicll/article/details/78765771

MySQL数据库安装不过多的介绍了:必须保证2个数据库的版本一致。 主数据库:192.168.0.43 从数据库:192.168.0.53 修改43主数据

MySQL数据库安装不过多的介绍了:必须保证2个数据库的版本一致。

主数据库:192.168.0.43

从数据库:192.168.0.53

修改43主数据库的配置文件:

打开logbin日志生成文件:

# binary logging - not required for slaves, but recommended

log-bin=mysql-bin

# binary logging format - mixed recommended

binlog_format=mixed

server-id=Master_id选nf文项,其中master_id必须为1到232–1之间的一个正整数值。去掉前面的注视符号

server-id = 1

重新启动数据库服务。

配置复制:

  1. 建立一个专门用于复制的账户允许它远程登陆:
mysql > GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO ' slaveuser'@'192.168.0.53' IDENTIFIED BY 'password';

mysql > FLUSH PRIVILEGES;

2.主服务器上当前的二进制日志名和偏移量值,直接输入命令SHOW MASTER STATUS.

mysql> SHOW MASTER STATUS;
+------------------+-----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000017 | 351051132 | | |

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

1 row in set (0.00 sec)

File列显示日志名,而Position显示偏移量。在该例子中,二进制日志值为mysql-bin.000017偏移量为351051132。记录该值。以后设置从服务器时需要使用这些值。它们表示复制坐标,告诉从服务器应从该点开始从主服务器上进行更新。

取得快照并记录日志名和偏移量后,,可以在主服务器上重新启用写活动:

上面的操作步骤2你可以不用 采用步骤3的方法 这样可以保证不停止你的主库的时候 数据的偏移量节点都是一致的。

3.使用mysqldump备份主服务器的数据,将转储文件装载到从服务器:

root@hr43 > mysqldump --master-data -u root -p hrsoft_share 表名 > 表名.sql

grep 'mysql-bin' 表名.sql 查询二进制日志名和偏移量值

拷贝 vip_company.sql 文件到从数据上。

修改53从服务器上面的数据库配置文件:

log-bin=mysql-bin #开始bin-log日志

server-id = 2

master-host = 192.168.0.43 #主数据库地址

master-user = 'slaveuser' #执行登录用户

master-password = 'password' #执行密码

master-port = 3306 #默认端口

report-host = net-app1

master-connect-retry = 30 # 如果从服务器发现主服务器断掉重新连接时间30S

log-bin

expire_logs_days = 3 #保留3天的日志文件

log-slave-updates

replicate-do-table=hrsoft_share.表名# 只复制表名表

如果要是复制多个表只要在下面直接添加(复制几个就添加几个)

replicate-do-table=hrsoft_share.表名

相关文章

网友评论

      本文标题:Mysql 单表主从同步

      本文链接:https://www.haomeiwen.com/subject/vjeuoltx.html