window迁移至linux mysql主从同步操作以及错误总结

目录

A: 测试环境

B 主库操作

C:从库操作

D:主从同步问题总结

问题一:  Slave_SQL_Running_State: Reading event from the relay log 出现延迟

问题二:Last_SQL_Error: Could not execute Delete_rows event


A: 测试环境

 

主服务器:  window系统

主库(master):masterhost|masterport|masteruser|masterpassword

mysql:5.7.17 community server

 

从服务器:  linux系统

从库(slave):  slavehost|slaveport|slaveuser|slavepassword

mysql:5.7.22  community server

 

 

登录数据库

主库:mysql -u masteruser -p --port masterport

从库  mysql -h slavehost  -u slaveuser-p --port slaveport  

退出数据库

exit

 

B 主库操作

  1. 修改mysql配置文件

文件路径:D:\mysql\my.ini  (注:window 文件为my.ini, linux 文件为/etc/my.cnf)

文件内容解释:

server-id = 1 这是数据库ID,此ID唯一,主库用默认的1即可,从库调整为2,多个从库的ID依次类推,切不可有相同ID出现,这样会造成同步出错

log_bin=mysql-bin 二进制日志文件,此项必须启用,从库需要通过它进行数据同步。

binlog_do_db=bigdata 需要同步的数据库,如果同步多个库,需要另行重写,

 

文件配置为:

# Binary Logging.

log_bin=mysql-bin

binlog_do_db=bigdata

binlog_do_db=coins

# Server Id.

server-id=1

 

  1. 重启mysql服务

Cmd-> services.msc ->mysql restart

  1. 建立同步用的数据库账户
    主库必须提供一个账户让从库通过此账户进行连接并进行同步,进入mysql后输入下面命令

grant replication slave on *.* to 'slave_account'@'%' identified by '123456';

  1. 显示主库信息并记录
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 | 16882020 |     bigdata,coins         |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    将上面的日志名mysql-bin.000001和偏移量16882020记录下来
  2. 备份主库数据库并复制到从库服务器上

5.1 确保window和linux数据库字符集相同,避免主从同步错误

Mysql> show create database coins\G;

show variables like %char%;

Show variables like %collation%;

 

5.2 备份主库数据库

主库mysql\bin文件夹处,管理员权限执行命令,

mysqldump -u root -p --port 8806 bigdata > D:\bigdata.sql   

mysqldump -u root -p --port 8806 coins > D:\coins.sql

 

5.3 将数据从window拷贝到Linux中。

Linux文件目录 /data/datafiles/

5.4登录Linux的MySql数据库

mysql -u root -p --port 8806

5.5创建与windows同名的数据库名

Mysql> show databases;

   Create database coins;

 

5.6导入数据 

Use coins;

Source  /data/datafiles/coins.sql

另一个数据库bigdata同样操作。

 

 

C:从库操作

  1. 修改mysql配置文件

文件路径: /etc/my.cnf

文件添加内容:

server-id=2

  1. 重启mysql服务

Service mysqld restart

  1. 手动同步

与主库进行同步,可将下面内容调整好后直接复制到mysql命令行下,这样不容易出错
设置连接MASTER MASTER_LOG_FILE为主库的File,MASTER_LOG_POS为主库的Position,就是在主库记录的那2个值

Mysql>change master to

master_host = 'masterhost ',

master_user='slave_account',

master_password='123456',

master_port=masterport,

master_log_file='mysql-bin.000001',

master_log_pos=16882020;

  1. 启动slave服务

Start slave;

  1. 检查从库是否正常同步
    mysql>show slave status \G;

 

当Slave_IO_Running 和 Slave_SQL_Running 两列的值都为 "Yes",表明 Slave 的 I/O 和 SQL 线程都在正常运行,如果出现错误,可以从Last_Error这个参数中看出哪里出错,然后进行排查。

 

 

D:主从同步问题总结

问题一:  Slave_SQL_Running_State: Reading event from the relay log 出现延迟

查找问题:

第一步:进入mysql

mysql> show slave status \G  # 查看同步状态

Slave_SQL_Running_State: Reading event from the relay log 出现延迟

第二步:查看日志:

方法一:根据中继日志文件与位置点分析relaylog

show relaylog events in 'i-2f725c20-relay-bin.000025 from 283059259 limit 50 ;

方法二:查看主库日志

/usr/bin/mysqlbinlog  -v --base64-output=DECODE-ROWS /data/datafiles/mysql-bin.000012 | grep -A 500 407189557

第三步:这个位置点开始是对一个百万级表的update操作,而这个update操作是个全表扫描。表上没主键和索引。

 

决办法:

 

第一步:mysql>stop slave;

第二步:给从库相应表加上相关的索引

第三步:mysql > start slave ;

第四步: mysql > show slave status \G

 Exec_Master_Log_Pos开始变化,Seconds_Behind_Master也在逐渐减小。成功解决问题。

 

 

问题二:Last_SQL_Error: Could not execute Delete_rows event

Last_SQL_Error: Could not execute Delete_rows event on table coins.upbit_hq_log; Can't find record in 'upbit_hq_log', Error_code: 1032; handler error HA_ERR_END_OF_FILE;  the event's master log mysql-bin.000004,  end_log_pos 4151275

 

查找问题:

/usr/bin/mysqlbinlog  -v --base64-output=DECODE-ROWS /data/datafiles/mysql-bin.000004 | grep -A 500 4151275

发现删除的记录在从库不存在。

 

解决办法:

进入mysql后

mysql>stop slave;  

set global sql_slave_skip_counter=1 ;

start slave;

show slave status \G;

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值