MySQL主从复制的一些命令

本文介绍了MySQL 8.0主从复制的配置,并详细讲解了查询主从数据库状态、开启/停止复制、sql_slave_skip_counter参数及slave-skip-errors选项的用法。特别提醒,从8.0.22版本开始,start slave已被start replica取代。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现主从复制的相关配置,参考:MySQL 8.0主从(Master-Slave)配置

部分命令

  1. 查询主数据库状态:
show master status\G;
  1. 查询从数据状态:
show slave status\G;
  1. 开启/停止从数据库复制:
start/stop slave;
  1. sql_slave_skip_counter
-- 在Slave跳过一个 Update_rows event 复制
set global sql_slave_skip_counter=1;
start slave;

sql_slave_skip_counter 参数的取值范围:[0, 4294967295]

sql_slave_skip_counter参数用于复制过程中从库可以自动跳过N个events。该参数不会立即生效,它从下一个start slave开始生效。

注意: MySQL 8.0.22 开始,start slave已经被start replica取代,此版本已弃用start slave。在8.0.22以前版本使用start slave

  1. slave-skip-errors
    slave-skip-errors的作用就是用来定义复制过程中从库可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。

slave-skip-errors=[err_code1,err_code2,…|all|ddl_exist_errors]

参数值:

  • OFF: 默认值
  • [list of error codes]
  • all:忽略所有错误消息并继续运行。无法保证数据的完整性
  • ddl_exist_errors:等价于错误代码列表 (1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)

常见错误号:

1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1050:数据表已存在,创建数据表失败
1051:数据表不存在,删除数据表失败
1054:字段不存在,或程序文件跟数据库有冲突
1060:字段重复,导致无法插入
1061:重复键名
1068:定义了多个主键
1094:位置线程ID
1146:数据表缺失,请恢复数据库
1053:复制过程中主服务器宕机
1062:主键冲突 Duplicate entry ‘%s’ for key %d

实现:
在/etc/mysql.cnf(MySQL配置文件)中添加slave-skip-errors=1062,1061,然后重启数据库或重新加载配置文件;

查看当前参数值:

show variables like 'slave_skip_errors';
在Ansible中,安装MySQL并配置主从复制通常涉及以下几个步骤: 1. **添加依赖包**: 首先,你需要在`hosts`文件或playbook里添加依赖于MySQL的包,如`mysql-server`和`galera-manager`(用于高可用集群)。这通常使用`apt`或`yum`模块,取决于你的操作系统。 ```yaml - name: Install MySQL and Galera Cluster dependencies apt: name: ['mysql-server', 'galera-cluster'] state: present ``` 2. **设置MySQL用户和权限**: 创建一个可以访问数据库的用户,并赋予复制相关的权限。 ```yaml - name: Create replication user mysql_user: login_user: 'root' login_password: '<your_root_password>' name: 'repl_user' password: '<new_password>' priv: '*.*:REPLICATION SLAVE' ``` 3. **配置Galera Cluster**: 使用`galera_cluster`模块创建或更新Galera集群配置。这需要集群节点之间的网络连接畅通。 ```yaml - name: Configure Galera cluster galera_cluster: nodes: - host: 'node1.example.com' port: 45678 - host: 'node2.example.com' port: 45678 cluster_name: 'my_cluster' wsrep_key: '<your_secret_key>' state: started ``` 4. **启动MySQL服务和启用复制**: 确保MySQL服务运行并开启二进制日志复制。 ```yaml - name: Start MySQL service and enable replication service: name: mysql state: restarted enabled: yes become: yes vars: mysql_repl_user: 'repl_user' mysql_repl_password: '<new_password>' ``` 5. **初始化从库**: 如果是首次设置从库,需要在主库上进行一些额外操作,例如导出初始数据,然后在从库上导入。 ```yaml - name: Initialize slave from master command: | mysqldump --user={{ mysql_repl_user }} --password={{ mysql_repl_password }} master_db > /tmp/master.sql mysql --user={{ mysql_repl_user }} --password={{ mysql_repl_password }} slave_db < /tmp/master.sql ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值