mysql 主从复制

本章是在Linux系统上,通过docker-compose进行mysql的部署,实现主从复制。

一. 文件目录

.
├── docker-compose.yml
├── mysql-master.cnf
└── mysql-slave.cnf

二. docker-compose.yml 文件

version: '3.8'

services:
  mysql-master:
    image: mysql:8.0
    container_name: mysql-master
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=mydatabase
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword
    ports:
      - "3306:3306"
    volumes:
      - ./mysql-master.cnf:/etc/mysql/conf.d/mysql-master.cnf
      - mysql-master-data:/var/lib/mysql
    networks:
      - mysql-net

  mysql-slave:
    image: mysql:8.0
    container_name: mysql-slave
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=mydatabase
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword
    ports:
      - "3307:3306"
    volumes:
      - ./mysql-slave.cnf:/etc/mysql/conf.d/mysql-slave.cnf
      - mysql-slave-data:/var/lib/mysql
    networks:
      - mysql-net

volumes:
  mysql-master-data:
  mysql-slave-data:

networks:
  mysql-net:
    driver: bridge

三. 配置文件

1. 主库 mysql-master.cnf

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=mydatabase

2. 从库 mysql-slave.cnf

[mysqld]
server-id=2
log-bin=mysql-bin
replicate-do-db=mydatabase

四. 启动 Docker-Compose

在包含docker-compose.yml文件的目录中运行以下命令来启动MySQL主从

docker-compose up -d

五. 配置主从复制

启动容器后,需要手动配置主从复制。首先,进入MySQL主节点容器:

docker exec -it mysql-master mysql -uroot -proot_password

在MySQL主节点中创建一个用于复制的用户:

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

然后,查看主节点的二进制日志文件和位置:

SHOW MASTER STATUS;

记下FilePosition的值,稍后在从节点中使用。

接下来,进入MySQL从节点容器:

docker exec -it mysql-slave mysql -uroot -proot_password

在从节点中配置主节点信息:

CHANGE MASTER TO
  MASTER_HOST='mysql-master',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_password',
  MASTER_LOG_FILE='mysql-bin.000001',  -- 替换为实际的File值
  MASTER_LOG_POS=156;                  -- 替换为实际的Position值

START SLAVE;

最后,检查从节点的状态:

SHOW SLAVE STATUS\G

六. 验证主从复制

在主节点中创建一个表并插入一些数据:

USE mydatabase;
CREATE TABLE test (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255));
INSERT INTO test (name) VALUES ('Master Data');

然后在从节点中查询该表,确认数据已经复制:
如果看到相同的数据,说明主从复制配置成功。

USE mydatabase;
SELECT * FROM test;
posted @ 2024-06-29 14:57  codegjj  阅读(2)  评论(0编辑  收藏  举报