Skip to content
On this page

MYSQL 运维相关

my.cnf 常见配置

集群架构类型

MySQL集群架构的类型有很多,根据不同的需求和场景,可以选择合适的方案。一般来说,MySQL集群架构可以分为以下几类:

  • 主从模式:这是最基本的集群架构,只有一个主库负责写操作,一个或多个从库负责读操作。这种模式可以实现读写分离和数据备份,但是主库是单点故障,如果主库宕机,需要手动切换到从库。
  • 双主模式:两个主库互为主从,可以实现双向复制和高可用。这种模式可以提高写性能和容灾能力,但是可能会出现数据冲突或延迟的问题。
  • MHA模式:这是一种基于主从模式的高可用方案,使用MHA(Master High Availability)工具来监控和管理集群。MHA可以自动检测主库故障,并在最短时间内切换到最新的从库。这种模式可以避免人工干预和数据丢失的风险,但是需要额外安装和配置MHA工具。
  • PXC模式:这是一种基于Galera Cluster技术的多主模式,所有节点都可以进行读写操作,并通过认证多播协议(GCS)来保证数据一致性。PXC(Percona XtraDB Cluster)是Percona公司提供的一个开源产品,可以实现真正的同步复制和无中心化架构。这种模式可以提供高性能和高扩展性,但是可能会增加网络开销和复杂度。

主从集群配置

MySQL主从复制集群是一种常见的数据库架构,可以实现数据的高可用性、负载均衡和故障恢复。

  • 配置一个主从复制集群的大致步骤如下:

    1. 在主服务器上开启二进制日志,并设置唯一的服务器ID。
    2. 在从服务器上开启二进制日志,并设置唯一的服务器ID。
    3. 在主服务器上创建一个专用的复制用户,并授予相应的权限。
    4. 在从服务器上配置主服务器的地址、端口、用户名和密码,并启动复制进程。
    5. 在主从服务器上分别检查复制状态,确保没有错误或延迟。
  • 示例:

    1. 在主服务器上,编辑my.cnf文件,添加以下内容:
      conf
      [mysqld]
      server-id=1
      log-bin=mysql-bin
      
    2. 重启MySQL服务,并登录MySQL客户端,执行以下命令:
      sql
      create user 'repl'@'%' identified by '123456';
      grant replication slave on *.* to 'repl'@'%';
      flush privileges;
      show master status;
      
    3. 记下File和Position的值,例如mysql-bin.000001和154。
    4. 在从服务器上,编辑my.cnf文件,添加以下内容:
      conf
      [mysqld]
      server-id=2
      log-bin=mysql-bin
      relay-log=relay-log
      read-only=1
      
    5. 重启MySQL服务,并登录MySQL客户端,执行以下命令:
      sql
      change master to master_host='192.168.93.100',master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;
      start slave;
      show slave status\G;
      
    6. 检查Slave_IO_Running和Slave_SQL_Running的值是否都是Yes,如果是,则表示复制成功。

双主集群配置

MySQL双主复制集群是一种高可用的数据库架构,可以实现数据的双向同步和负载均衡。

  • 配置一个双主复制集群的大致步骤如下:

    1. 在两台服务器上分别开启二进制日志,并设置不同的服务器ID和自增长步长。
    2. 在两台服务器上分别创建一个专用的复制用户,并授予相应的权限。
    3. 在两台服务器上分别配置对方的地址、端口、用户名和密码,并启动复制进程。
    4. 在两台服务器上分别检查复制状态,确保没有错误或延迟。
  • 示例 假设有两台服务器:192.168.93.100 mysql-master1 和 192.168.93.101 mysql-master2 :

    1. 在mysql-master1上,编辑my.cnf文件,添加以下内容:
      conf
      [mysqld]
      server-id=1
      log-bin=mysql-bin
      auto-increment-increment=2
      auto-increment-offset=1
      
    2. 重启MySQL服务,并登录MySQL客户端,执行以下命令:
      sql
      create user 'repl'@'%' identified by '123456';
      grant replication slave on *.* to 'repl'@'%';
      flush privileges;
      show master status;
      
    3. 记下File和Position的值,例如mysql-bin.000001和154。
    4. 在mysql-master2上,编辑my.cnf文件,添加以下内容:
      conf
      [mysqld]
      server-id=2
      log-bin=mysql-bin
      auto-increment-increment=2
      auto-increment-offset=2
      
    5. 重启MySQL服务,并登录MySQL客户端,执行以下命令:
      sql
      create user 'repl'@'%' identified by '123456';
      grant replication slave on *.* to 'repl'@'%';
      flush privileges;
      show master status;
      change master to master_host='192.168.93.100',master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;
      start slave;
      show slave status\G;
      
    6. 记下File和Position的值,例如mysql-bin.000002和234。
    7. 检查Slave_IO_Running和Slave_SQL_Running的值是否都是Yes,如果是,则表示从mysql-master1复制成功。
    8. 回到mysql-master1上,执行以下命令:
      sql
      change master to master_host='192.168.93.101',master_user='repl',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=234;
      start slave;
      show slave status\G;
      
    9. 检查Slave_IO_Running和Slave_SQL_Running的值是否都是Yes,如果是,则表示从mysql-master2复制成功。
  • 优缺点

    • 双主模式的优点有:
      • 可以实现读写分离和负载均衡,提高服务器的利用率和性能。
      • 可以实现主库的高可用,当一个主库发生故障时,可以快速切换到另一个主库,减少业务中断的时间。
      • 可以实现数据的双向同步和恢复,当一个主库恢复后,可以通过复制机制与另一个主库保持一致。
    • 双主模式的缺点有:
      • 可能会出现数据冲突或死锁的问题,例如两个主库同时插入相同的主键值或修改相同的记录。
      • 可能会出现数据延迟或丢失的问题,例如网络故障导致复制中断或延迟,或者复制过程中出现错误导致数据不一致。
      • 需要注意避免循环复制或无限循环的问题,例如两个主库互相触发触发器或存储过程。

MHA(Master High Availability)

MHA模式的原理:

  • MHA由两个组件组成,一个是MHA Manager,负责监控和管理MySQL集群,另一个是MHA Node,负责在每个MySQL节点上执行复制相关的操作。
  • MHA Manager可以部署在任意一台机器上,但不能部署在主库上。MHA Manager可以管理多个MySQL集群,每个集群需要有一个配置文件来指定主库和从库的信息。
  • MHA Node需要部署在每个MySQL节点上,包括主库和从库。MHA Node需要安装Perl模块和SSH客户端,并且需要配置SSH免密登录。
  • MHA Manager通过SSH连接到每个MySQL节点,定期检查主库的状态和从库的复制延迟。如果发现主库故障或者复制延迟超过阈值,就会触发故障切换的流程。
  • 故障切换的流程分为三个阶段:第一阶段是检查配置和环境,第二阶段是选择最合适的从库作为新的主库,并且停止所有从库的复制进程,第三阶段是将其他从库重新指向新的主库,并且启动复制进程。
  • 故障切换过程中,MHA会尽量保证数据的一致性,通过比较二进制日志文件(binlog)来找出最新的数据,并且通过relay log recovery(中继日志恢复)来避免数据丢失。

MHA模式配置步骤:

  • 安装MHA Manager和MHA Node组件,可以通过源码编译或者包管理器来安装。
  • 配置MySQL主从复制,可以使用半同步复制或者异步复制,但是需要开启binlog和relay log,并且设置server-id和log-bin参数。
  • 配置SSH免密登录,需要在MHA Manager机器上生成SSH密钥,并且将公钥拷贝到每个MySQL节点上。
  • 编写MHA配置文件,需要指定主库和从库的地址、端口、用户名、密码等信息,以及一些故障切换的选项。
  • 启动MHA Manager进程,使用masterha_manager命令来启动,并且指定配置文件的路径。启动后,可以使用masterha_check_ssh和masterha_check_repl命令来检查SSH连接和复制状态是否正常。
  • 测试故障切换,可以手动停止主库的MySQL服务或者网络服务,观察MHA Manager是否能自动检测到故障,并且执行切换操作。切换后,可以使用masterha_check_status命令来查看集群的状态。

PXC(Percona XtraDB Cluster)

PXC模式的MySQL集群架构是一种高可用的数据库解决方案,它基于Percona Server和Xtrabackup与Galera库集成,实现了同步多主复制。PXC模式的优点是可以避免数据复制延迟,保证数据的一致性和可靠性。PXC模式的缺点是可能会降低写入性能,增加网络开销和资源消耗。 使用场景:

  • 需要一个高可用的MySQL数据库,可以实现多节点同时读写,并且保证数据的强一致性。
  • 需要一个可以快速扩展和恢复的MySQL数据库,可以利用PXC集群的自动成员管理和状态转换功能。
  • 需要一个可以无缝迁移的MySQL数据库,可以使用mysqldump或者XtraBackup工具将原有数据库导入到PXC集群中。

Released under the MIT License.