MySQL是一种广泛使用的开源关系型数据库管理系统,它在各种应用场景下都有着广泛的应用。在实际的应用中,我们经常会遇到需要进行读写分离和高可用性的需求。MySQL的主从复制(Master-Slave Replication)和主主复制(Master-Master Replication)就是为此而设计的解决方案。

MySQL主从复制(Master-Slave Replication)

在MySQL主从复制中,一个服务器充当主服务器(Master),负责接收和处理写操作请求。而一个或多个服务器充当从服务器(Slave),负责接收和处理读操作请求。主服务器会将自己的操作日志(binary log)传输给从服务器,并由从服务器应用到自己的数据库中。这样一来,主从复制就实现了读写分离的效果。

使用场景

主从复制适用于读多写少的场景。通过将读操作分散到从服务器上,可以极大地提高数据库的读取性能。同时,主从复制还能提供数据冗余和备份,从而提高系统的可用性和可靠性。

主从复制的配置

主从复制的配置非常简单。下面是一个简单的配置示例:

  1. 首先,在主服务器上开启二进制日志功能。在my.cnf配置文件中添加以下内容:
[mysqld]
log-bin=mysql-bin
server-id=1
  1. 然后,为从服务器创建一个用于复制的用户。在MySQL命令行中执行以下命令:
CREATE USER 'replication'@'slaveip' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'slaveip';
  1. 在主服务器上执行以下命令,获取当前二进制日志的位置信息:
SHOW MASTER STATUS;

得到类似下面的输出:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 |              |                  |
+------------------+----------+--------------+------------------+
  1. 在从服务器上执行以下命令,配置复制参数:
CHANGE MASTER TO
    MASTER_HOST='masterip',
    MASTER_USER='replication',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=107;
  1. 最后,在从服务器上启动复制进程:
START SLAVE;

状态图

下面是一个展示主从复制状态变化的状态图:

stateDiagram
    [*] --> NotConnected
    NotConnected --> Connected: connect
    Connected --> Waiting: receive binlog
    Connected --> NotConnected: disconnect
    Waiting --> Applying: apply binlog
    Applying --> Waiting: continue
    Applying --> Failed: error
    Failed --> Waiting: reset

甘特图

下面是一个展示主从复制过程的甘特图:

gantt
    title 主从复制过程
    dateFormat YYYY-MM-DD
    section 主服务器
    接收和处理写操作请求 : done, 2022-09-01, 2d
    传输二进制日志 : done, 2022-09-03, 2d
    section 从服务器
    接收和处理读操作请求 : done, 2022-09-01, 2d
    应用二进制日志 : done, 2022-09-03, 2d

MySQL主主复制(Master-Master Replication)

在MySQL主主复制中,多个服务器充当主服务器,彼此之间相互复制。每个主服务器都可以接收和处理读写操作请求。这样一来,主主复制不仅实现了读写分离,还提供了高可用性和负载均衡的效果。

使用场景

主主复制适用于写多读多的场景。通过将写操作和读操作分散到多个主服务器上,可以提高数据库的读写性能和并发能力。同时,主主复制还能提供数据冗余和备份,从而提高系统的可用性和可靠性。

主主