首页 > 数据库 >mysql主从复制-重做从库

mysql主从复制-重做从库

时间:2023-10-18 17:15:13浏览次数:30  
标签:主从复制 SSL 复制 Master mysql 服务器 日志 从库

mysql主从复制-重做从库

  • 在主服务器执行 查看从节点的数量
SHOW SLAVE HOSTS;

+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID                           |
+-----------+------+------+-----------+--------------------------------------+
|    127397 |      | 3306 |    117398 | 8b429839-13bd-11ed-bd2d-6c442a117e6d |
|    127392 |      | 3306 |    117398 | 0913d4b2-bd4c-11ec-97dc-6c442a117e02 |
+-----------+------+------+-----------+--------------------------------------+

语句返回的 Server_id 在配置文件指定
$ cat /etc/my.cnf|grep server_id

server_id=127397
  • 在主服务器执行 查看主服务器的bin log状态,在下面会用到
SHOW MASTER STATUS;
+------------------+-----------+--------------+------------------+-------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+-----------+--------------+------------------+-------------------+
| mysql_bin.000218 | 327290956 |              |                  |                   |
+------------------+-----------+--------------+------------------+-------------------+
  • 主库执行,查看已经存在的复制账户 在下面会用到
SHOW GRANTS FOR 'repl'@'10.24.211.5';

root@(none) 10:53:45>SHOW GRANTS FOR 'repl'@'10.24.211.5';
+------------------------------------------------------+
| Grants for [email protected]                            |
+------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.24.211.5' |
+------------------------------------------------------+

这是一个MySQL授权语句,用于授予一个名为 "repl" 的用户在所有数据库 (`*.*`) 上执行复制的权限。该用户将能够作为复制从库连接到主库进行数据同步。

解释授权语句的不同部分:

- `GRANT`: 表示授权。
- `REPLICATION SLAVE`: 是授予的权限类型,允许用户充当从库并执行复制操作。
- `ON *.*`: 表示授予权限的范围,其中 `*.*` 表示所有数据库的所有表。
- `TO 'repl'@'10.24.211.5'`: 指定了要授予权限的用户,这是用户名为 "repl" 的用户,并且只能从IP地址为 "10.24.211.5" 的主机连接。这是限制用户的主机的一种方法,以增强安全性。

这个语句的效果是,用户 "repl" 在主机 "10.24.211.5" 上被授予充当从库的权限,并能够连接到MySQL主服务器以执行复制操作。
  • 通过在从服务器上运行以下命令来查看主从复制的延迟:
SHOW SLAVE STATUS\G;

Slave_IO_State: 正在读取二进制日志
Master_Host: 主服务器的主机名或IP地址
Master_User: 用于复制的用户
Master_Port: 主服务器的端口
Connect_Retry: 尝试重新连接的次数
Master_Log_File: 主服务器当前正在写入的二进制日志文件名
Read_Master_Log_Pos: 从节点正在读取的主服务器的二进制日志位置
Relay_Log_File: 从节点正在写入的中继日志文件名
Relay_Log_Pos: 从节点正在写入的中继日志位置
Relay_Master_Log_File: 从节点正在读取的主服务器的二进制日志文件名
Slave_IO_Running: 从节点的I/O线程是否正在运行(Yes或No)
Slave_SQL_Running: 从节点的SQL线程是否正在运行(Yes或No)
Replicate_Do_DB: 复制中被指定的数据库
Replicate_Ignore_DB: 复制中被忽略的数据库
Replicate_Do_Table: 复制中被指定的表
Replicate_Ignore_Table: 复制中被忽略的表
Replicate_Wild_Do_Table: 复制中被指定的表(使用通配符)
Replicate_Wild_Ignore_Table: 复制中被忽略的表(使用通配符)
Last_Errno: 上一个错误的错误码(如果有错误)
Last_Error: 上一个错误的错误信息
Skip_Counter: 跳过SQL语句的计数(用于跳过错误)
Exec_Master_Log_Pos: 正在执行的主服务器的二进制日志位置
Relay_Log_Space: 中继日志文件的大小(字节)
Until_Condition: 复制停止条件(NONE,ERROR,SQL_AFTER_MTS_GAPS,或MASTER_POS_WAIT)
Until_Log_File: 复制停止条件中指定的主服务器日志文件名
Until_Log_Pos: 复制停止条件中指定的主服务器日志位置
Master_SSL_Allowed: 是否允许主服务器使用SSL
Master_SSL_CA_File: SSL CA证书文件
Master_SSL_CA_Path: SSL CA证书路径
Master_SSL_Cert: SSL证书文件
Master_SSL_Cipher: SSL密码套件
Master_SSL_Key: SSL密钥文件
Seconds_Behind_Master: 从节点滞后主服务器的秒数
Master_SSL_Verify_Server_Cert: 是否验证主服务器SSL证书
Last_IO_Errno: 上一个I/O线程错误的错误码(如果有错误)
Last_IO_Error: 上一个I/O线程错误的错误信息
Last_SQL_Errno: 上一个SQL线程错误的错误码(如果有错误)
Last_SQL_Error: 上一个SQL线程错误的错误信息
  • 如果错误很少,可以直接跳过一次
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;  -- 这里的1代表要跳过的错误次数,可以根据实际情况调整
START SLAVE;

如果延迟特别多,从节点无法追上主库可以 重做从节点

  1. 备份(顺序不能乱)
# 重置主库同步设置 这个命令会删除主服务器上的二进制日志文件,并重新开始计数,从一个干净的状态开始。这意味着之前的二进制日志文件将被删除,主从复制的同步状态也将重新初始化。
RESET MASTER;

# 锁定主库,只能读
FLUSH TABLES WITH READ LOCK;

# 得到锁库后的binlog 位置 输出的 File 和 Position 在后面会用到
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000219 | 122 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

# 主库执行
mysqldump -uroot -p"xxx" --all-databases > ./mysql-master-dump.sql

#解锁主库
UNLOCK TABLES;

# 将备份文件传输到从节点
scp -P xx /data16/mysql-master-dump.sql [email protected]:/data16/mysql-master-dump.sql
  1. 从库执行
stop slave;

# 二选一执行
RESET SLAVE;
# 该命令用于重置从服务器的主从复制配置和状态,但保留主服务器(Master)的连接信息。主要包括以下方面:
# 清除从服务器上的所有主从复制配置信息。
# 清除从服务器上的二进制日志文件和位置信息。
# 重置从服务器的复制状态,以便它可以重新连接到主服务器开始同步。

RESET SLAVE all;
# 不仅会清除主从复制配置和状态,还会删除从服务器上的所有二进制日志文件。主要包括以下方面:
# 清除从服务器上的所有主从复制配置信息。
# 清除从服务器上的二进制日志文件和位置信息。
# 删除从服务器上的所有已下载的二进制日志文件。
# 重置从服务器的复制状态,以便它可以重新连接到主服务器开始同步。

# 比较慢
source /data16/mysql-master-dump.sql;
# 比较快 mysql 命令可以在一次执行中处理整个 SQL 文件,而 source 命令是逐行执行。这使得批处理处理更加高效。
mysql -uroot -pDevM2Jh@M2#Ez200 < ./mysql-master-dump.sql

# 可选执行 语句用到的参数在下面有些语句可以查询得到
CHANGE MASTER TO
  MASTER_HOST = '10.73.9.8', # 主库ip
  MASTER_USER = 'repl',   # 主库上的账号
  MASTER_PASSWORD = 'xxxx',
  MASTER_LOG_FILE = 'mysql_bin.000218', # 锁定主库之后的 File
  MASTER_LOG_POS = 351344081; # 锁定主库之后的 Position
START SLAVE;
SHOW SLAVE STATUS\G

STOP SLAVE;
# 可选 解释如下
set global slave_exec_mode='STRICT';
START SLAVE;

slave_exec_mode 是 MySQL 8.0 版本引入的参数,用于控制从服务器(Slave)执行主从复制事件的模式。这个参数用于增加主从复制的灵活性,允许管理员选择在从服务器上执行复制事件时的执行模式。这里是与上面回答相关的详细解释:

  1. IDEMPOTENT 模式(默认模式):

    • slave_exec_mode = IDEMPOTENT 是默认模式,它表示从服务器会正常地执行来自主服务器的复制事件,这些事件可能会更改数据库的状态。
    • 从服务器将尽力保持与主服务器的数据一致,但不会主动检查是否存在可能导致数据不一致的事件。
    • 适用于大多数情况,因为它在性能方面表现良好。
  2. STRICT 模式

    • slave_exec_mode = STRICT 表示从服务器会以更加严格的方式执行复制事件,如果发现可能导致数据不一致的事件,将中止复制。
    • 这个模式用于强制从服务器保持与主服务器完全一致的状态,但也可能导致主从复制的中断。
    • 适用于对一致性要求极高的环境,但需要注意潜在的中断。
  3. COST_OP 模式

    • slave_exec_mode = COST_OP 允许从服务器执行复制事件,但在执行过程中会检查事件的“代价”。
    • 如果事件的执行代价过高,从服务器会中止复制,以避免执行成本过高的事件。
    • 这用于避免在从服务器上执行代价高的事件,可能导致性能问题。
  4. COST_OP_EXCLUDE 模式

    • slave_exec_mode = COST_OP_EXCLUDECOST_OP 模式类似,但在这个模式下,从服务器会跳过代价过高的事件,而不是中止复制。
    • 这允许从服务器继续复制,但可能会导致主从不一致。
    • 这用于降低执行成本过高事件对主从复制的影响。

通过设置 slave_exec_mode 参数,管理员可以根据具体需求选择适当的执行模式,以平衡数据一致性和性能。这个参数增加了主从复制的灵活性,允许根据具体环境和要求来配置主从复制行为。

  • 查询 slave_exec_mode 的值
SHOW VARIABLES LIKE 'slave_exec_mode';

+-----------------+--------+
| Variable_name   | Value  |
+-----------------+--------+
| slave_exec_mode | STRICT |
+-----------------+--------+

标签:主从复制,SSL,复制,Master,mysql,服务器,日志,从库
From: https://www.cnblogs.com/sening/p/17772839.html

相关文章

  • Mysql 连接池配置问题
     使用SglSugar BulkCopy方法进行大批量插入时一直报错,检查了实体、数据库字段属性都无异常,最后发现数据库连接中配置了 AllowZeroDatetime=true;ConvertZeroDateTime= true;注释后异常解决。  AllowZeroDatetime=true,可以解决的是Mysql中datetime默认值为0000-00......
  • MySQL 是怎么加锁的
    MySQL是怎么加锁的什么SQL语句会加行级锁?普通select不会加锁,除非是串行化隔离等级。但是select...forupdate或者select...lockinsharemode加锁,统称为锁定读。还有updatedelete语句也会加锁行级锁有哪些种类?三种,分别是recordlock,gaplock,next-keylockrecordloc......
  • debian12安装mysql5.7
    出于某些原因,不得不捏着鼻子在debian12上安装mysql5.7这里下载debian格式的包,选第一个bundle的安装步骤sudogdebi-nxxx安装的顺序commoncommon-clientclientcommon-serverserver......
  • mysql 运行没错,在mybatis中报错 druid 报错 syntax error, expect RPAREN, actual
    您遇到的问题可能是由于Druid版本较旧导致的。在Druid 1.0.19中,对于某些语法结构的处理存在一些限制和问题。针对您的具体情况,可以尝试以下解决方案:1. 确保SQL语句的括号匹配正确。错误消息"expect RPAREN, actual IDENTIFIER DAY"表明Druid期望一个右括号(RPAREN),但实际上......
  • MySQL 8.0.34 tar包安装踩坑记录
    环境概述操作系统:Centos7.9MySQL版本:8.0.34错误提示[[email protected]]#/soft/mysql/bin/mysqld--initialize--user=mysql--basedir=/soft/mysql--datadir=/soft/mysql/data/soft/mysql/bin/mysqld:/lib64/libstdc++.so.6:version`CXXABI_1.3.11'not......
  • linux centos7 安装mysql
    home目录下新建安装包存放位置cdhomemkdirinstall_packetcd/home/install_packet下载mysql5.7rpm源wgethttp://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm安装下载好的rpm包rpm-ivhmysql57-community-release-el7-8.noarch.rpm安装mysqly......
  • 【MySQL】DATE_FORMAT,DATE_ADD函数用法
    一、示例1select*frombi.testwhereDATE_FORMAT(UPDATE_TIME,'%Y-%m-%d')='2023-09-11';当然 '%Y-%m-%d'是可以根据实际需求调整的  二、示例22.1给时间增加一小时UPDATEbi.testSETUPDATE_TIME=DATE_ADD(UPDATE_TIME,INTERVAL1HOUR);2.2给时间减少......
  • mysql 日期格式为timestamp 和 datetime 使用month 函数取月份的区别
    1.DATE_FORMAT(data_dt,'%m')as`month`,使用这种方式无论什么类型的时间,取到的都是两位数。2.timstamp格式时间使用month()函数取出的月份只有一位。3.atetime格式时,month()函数获取到的就是两位数的月份。注意相关工具使用会不按预期执行,我的代码取到的月份为一位数,补没......
  • IM即时通讯功能mysql数据库设计
    设计一个具备即时消息(IM)功能的数据库需要考虑许多因素,包括用户、消息、聊天室、消息状态等。以下是一个简单的MySQL数据库设计示例,用于支持基本的IM功能:用户表(User)用户ID(UserID)用户名(Username)密码(Password)电子邮件(Email)其他用户相关信息聊天室表(ChatRoo......
  • Mysql 事务
    1.事务的概念事务是访问并更新数据库中各种数据项的一个程序执行单元。在事务中的操作,要么都做修改,要么都不修改。2.事务和锁当执行事务操作时(dml语句),mysql会在表上加锁,防止其他用户修改数据。3.事务的特性:a.原子性:事务是一个原子操作,它要么全部成功,要么全部失败回滚。b.一致性:事......