docker-compose安装mysql8集群

我这里一主两从mysql数据库集群,mysql镜像版本是8.0.39
如下在这里插入图片描述

如下:

[root@VM-20-8-centos mysqlData]# docker-compose ps
NAME           IMAGE       COMMAND                  SERVICE        CREATED          STATUS                    PORTS
mysql-master   mysql:8.0   "docker-entrypoint.s…"   mysql-master   50 minutes ago   Up 50 minutes (healthy)   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp
mysql-slave1   mysql:8.0   "docker-entrypoint.s…"   mysql-slave1   50 minutes ago   Up 50 minutes (healthy)   3306/tcp, 33060/tcp
mysql-slave2   mysql:8.0   "docker-entrypoint.s…"   mysql-slave2   50 minutes ago   Up 50 minutes (healthy)   3306/tcp, 33060/tcp
[root@VM-20-8-centos mysqlData]# 

创建docker-compose.yml文件

services:
  mysql-master:
    image: mysql:8.0
    container_name: mysql-master
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    ports:
      - "3307:3306"
    volumes:
      - /usr/local/mysqlData/master:/var/lib/mysql
      - /usr/local/mysqlConf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p rootpassword"]
      interval: 10s
      retries: 3
      start_period: 30s
      timeout: 5s
    networks:
      - mysql-network

  mysql-slave1:
    image: mysql:8.0
    container_name: mysql-slave1
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    volumes:
      - /usr/local/mysqlData/slave1:/var/lib/mysql
      - /usr/local/mysqlConf/slave1.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p rootpassword"]
      interval: 10s
      retries: 3
      start_period: 30s
      timeout: 5s
    networks:
      - mysql-network

  mysql-slave2:
    image: mysql:8.0
    container_name: mysql-slave2
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    volumes:
      - /usr/local/mysqlData/slave2:/var/lib/mysql
      - /usr/local/mysqlConf/slave2.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p rootpassword"]
      interval: 10s
      retries: 3
      start_period: 30s
      timeout: 5s
    networks:
      - mysql-network

networks:
  mysql-network:

注意:/usr/local/mysqlData/slave2 /usr/local/mysqlData/slave1 挂载目录事先创建好

启动命令

docker-compose up -d

创建完成后 docker容器会正常启动

[root@VM-20-8-centos mysqlData]# docker-compose ps
NAME           IMAGE       COMMAND                  SERVICE        CREATED          STATUS                    PORTS
mysql-master   mysql:8.0   "docker-entrypoint.s…"   mysql-master   41 minutes ago   Up 41 minutes (healthy)   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp
mysql-slave1   mysql:8.0   "docker-entrypoint.s…"   mysql-slave1   41 minutes ago   Up 41 minutes (healthy)   3306/tcp, 33060/tcp
mysql-slave2   mysql:8.0   "docker-entrypoint.s…"   mysql-slave2   41 minutes ago   Up 41 minutes (healthy)   3306/tcp, 33060/tcp
[root@VM-20-8-centos mysqlData]# 

验证配置变更
这里只是对两个从节点的server_id 手动配置,主节点应该是server_id ,需要事先查看下,是否为1

docker-compose exec mysql-slave1 mysql -uroot -p -e "SET GLOBAL server_id = 2;"
docker-compose exec mysql-slave1 mysql -uroot -p -e "SHOW VARIABLES LIKE 'server_id';"

docker-compose exec mysql-slave2 mysql -uroot -p -e "SET GLOBAL server_id = 3;"
docker-compose exec mysql-slave2 mysql -uroot -p -e "SHOW VARIABLES LIKE 'server_id';"

进入主节点创建复制用户账号

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

# 在主节点上,为复制用户指定 mysql_native_password 插件:
ALTER USER 'replica'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replica_password';
FLUSH PRIVILEGES;

在主节点查看信息:
获取主节点的二进制日志信息:
首先,您需要在主节点上获取当前的二进制日志文件名和位置。这可以通过在主节点的 MySQL 命令行中执行以下命令来完成:

SHOW MASTER STATUS;

如下

mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000003 |     1316 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

记住 binlog.000003 和1316

在从节点去执行同步

CHANGE MASTER TO
	MASTER_HOST='127.0.0.1',
	MASTER_PORT=3307,
	MASTER_USER='replica',
	MASTER_PASSWORD='replica_password',
	MASTER_LOG_FILE='binlog.000003',
	MASTER_LOG_POS=1316;

执行开始命令

START SLAVE;

在从节点查看同步状态

SHOW SLAVE STATUS\G

其他命令

重置从节点的复制:
在从节点上执行以下命令来重置复制状态:

sql

STOP SLAVE;
RESET SLAVE ALL;


删除dokcer-compose

docker-compose down 
docker-compose down -v 


启动容器

docker-compose up -d
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Docker Compose配置MySQL集群。首先,你需要创建一个Docker网络,比如mysqlms_myweb,可以使用以下命令来创建网络: ``` docker network create mysqlms_myweb ``` 然后,你可以使用docker-compose.yml文件来定义MySQL集群的配置。在文件中,你可以指定每个MySQL实例的容器,并在它们之间设置适当的连接和环境变量。这样,当你启动Docker Compose时,它将自动创建和连接这些容器。 下面是一个示例docker-compose.yml文件的配置,将创建一个包含两个MySQL实例的集群: ``` version: '3' services: mysql1: image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: password networks: - mysqlms_myweb mysql2: image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: password networks: - mysqlms_myweb networks: mysqlms_myweb: external: name: mysqlms_myweb ``` 在这个配置中,我们定义了两个MySQL实例:mysql1和mysql2。每个实例都使用了mysql镜像,并设置了root用户的密码。 同时,我们还定义了一个外部网络mysqlms_myweb,并将这两个MySQL实例连接到了这个网络上,以便它们可以相互通信。 为了启动MySQL集群,你可以使用以下命令运行Docker Compose: ``` docker-compose up -d ``` 通过这个配置,你将创建一个包含两个MySQL实例的集群,可以通过mysql1和mysql2来访问它们。 请注意,这只是一个示例配置,你可以根据你的需求进行修改和扩展。同时,你还可以在docker-compose.yml文件中添加其他服务,并与MySQL集群进行连接和通信。 引用提供了关于使用Docker Compose建立ELK集群的实现方法的详细说明,你可以参考其中的示例代码和配置进行学习和实践。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker-compose部署mysql主从复制集群](https://blog.csdn.net/qq_29012499/article/details/128489129)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Docker-compose 建立ELK集群的实现方法](https://download.csdn.net/download/weixin_38589314/12899018)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python开发Youtube官方调用接口,支持一键部署!!!](https://download.csdn.net/download/L_huiger/88221247)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值