mysql主从复制 ( docker-compose )
南江烂柯人 JAVA劝退师

mysql主从复制

MySQL 主从复制是一种基于日志的复制机制,用于将主服务器(Master)上的数据实时复制到一个或多个从服务器(Slave)。主从复制的原理如下:

  1. 主服务器将所有修改操作记录在二进制日志(Binary Log)中。这些修改可以是插入、更新或删除数据的操作。
  2. 从服务器连接到主服务器,并发送一个请求,请求成为主服务器的从服务器。主服务器收到请求后,将记录从服务器的信息,并开始与从服务器建立复制连接。
  3. 主服务器将二进制日志中的内容发送给从服务器。从服务器接收并执行这些日志中的操作,将数据修改操作反映到自己的数据库上。
  4. 从服务器还会定期向主服务器发送心跳信息以维持连接。如果主服务器长时间没有收到从服务器的心跳信息,就认为从服务器宕机,不再向其发送日志。
  5. 如果主服务器发生故障,导致无法提供服务,可以将一个从服务器提升为新的主服务器,以继续提供服务。此时,其他从服务器将切换到新的主服务器上进行复制。
  6. 通过主从复制,可以实现数据的实时复制和分布式读取,提高数据库的可用性和读取性能。此外,主从复制还可以用于备份数据,当主服务器发生故障时,可以快速切换到从服务器,减少服务停机时间。
  7. 需要注意的是,主从复制是异步的,从服务器的数据可能稍有延迟。而且主从复制只复制数据修改操作,不复制表结构的变更。如果需要同步表结构的变更,可以使用主从复制搭配其他工具,如 GTID(Global Transaction Identifier)或者基于触发器的解决方案。

创建对应的文件夹

  mkdir -p /home/mysql/{cnf,logs,mysql}
  mkdir -p /home/mysql-slave/{cnf,logs,mysql}

在cnf文件夹下创建my.cnf文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#写入下面配置
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql

default-time_zone='+8:00'
skip-name-resolve

log-bin=mysql-bin
binlog-format=ROW
# 每个服务不一样
server_id=1

symbolic-links=0
expire_logs_days=7

max_connections = 2000
max_user_connections = 1900
max_connect_errors = 100000
max_allowed_packet = 50M
lower_case_table_names=0
sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'


编写docker-compose.yml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
version: '3.5'
networks:
mysql-network:
driver: bridge
ipam:
config:
- subnet: 10.1.20.0/24

services:
mysql-master:
image: mysql:8.0.32
container_name: mysql-3124
privileged: true
restart: always
ports:
- 3124:3306
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=L3z5uLD@rB1y
- character-set-server=utf8mb4
- collation-server=utf8mb4_general_ci
#目录挂载
volumes:
- /home/mysql/cnf:/etc/mysql/conf.d
- /home/mysql/logs:/logs
- /home/mysql/mysql:/var/lib/mysql
networks:
mysql-network:
ipv4_address: 10.1.20.2

mysql-slave:
image: mysql:8.0.32
container_name: mysql-3125
privileged: true
restart: always
ports:
- 3125:3306
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=L3z5uLD@rB1y
- character-set-server=utf8mb4
- collation-server=utf8mb4_general_ci
#目录挂载
volumes:
- /home/mysql-slave/cnf:/etc/mysql/conf.d
- /home/mysql-slave/logs:/logs
- /home/mysql-slave/mysql:/var/lib/mysql
networks:
mysql-network:
ipv4_address: 10.1.20.3
  • 本文标题:mysql主从复制 ( docker-compose )
  • 本文作者:南江烂柯人
  • 创建时间:2024-04-02 10:31:40
  • 本文链接:https://www.mattjia.com/2024/04/02/mysql/mysql主从复制/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论