当前位置:   article > 正文

docker 安装mysql8 实现互为主从_docker-compose安装mysql8

docker-compose安装mysql8

目录结构

先按照这个目录结构创建。

mysql.conf 配置,mysql的基础可以在此添加

mysql配置

mysql-master下conf配置

  1. [mysqld]
  2. # 设置服务器唯一标识号
  3. server-id=1
  4. # 启用二进制日志
  5. log-bin=master-bin
  6. # 指定需要复制的数据库
  7. binlog-do-db=test_db
  8. # 指定二进制日志的格式为行级别
  9. binlog-format=row
  10. # 启用 GTID 模式
  11. gtid-mode=ON
  12. # 强制 GTID 一致性检查
  13. enforce-gtid-consistency=ON

mysql-slave下conf配置

  1. [mysqld]
  2. # 设置服务器唯一标识号
  3. server-id=2
  4. # 启用二进制日志
  5. log-bin=slave-bin
  6. # 指定需要复制的数据库
  7. binlog-do-db=test_db
  8. # 指定二进制日志的格式为行级别
  9. binlog-format=row
  10. # 启用 GTID 模式
  11. gtid-mode=ON
  12. # 强制 GTID 一致性检查
  13. enforce-gtid-consistency=ON

 注意我指定了数据库为test_db

 docker一键部署配置

  1. version: '3.8'
  2. services:
  3. mysql-master:
  4. image: mysql:latest
  5. container_name: mysql-master
  6. environment:
  7. MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码
  8. MYSQL_DATABASE: test_db # 要创建的数据库名称
  9. ports:
  10. - "3001:3306" # 映射到主服务器的端口
  11. volumes:
  12. - ./mysql-master/data:/var/lib/mysql # 挂载数据目录
  13. - ./mysql-master/config/mysql.conf:/etc/mysql/conf.d/mysql.conf # 挂载主服务器的配置文件
  14. - ./mysql-master/log:/var/log/mysql # 挂载日志目录
  15. command: --server-id=1 --log-bin=master-bin --binlog-do-db=test_db --binlog-format=row --gtid-mode=ON --enforce-gtid-consistency=ON # 主服务器的命令参数
  16. mysql-slave:
  17. image: mysql:latest
  18. container_name: mysql-slave
  19. environment:
  20. MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码
  21. MYSQL_DATABASE: test_db # 要创建的数据库名称
  22. ports:
  23. - "3002:3306" # 映射到从服务器的端口
  24. volumes:
  25. - ./mysql-slave/data:/var/lib/mysql # 挂载数据目录
  26. - ./mysql-slave/config:/etc/mysql/conf.d # 挂载从服务器的配置文件
  27. - ./mysql-slave/log:/var/log/mysql # 挂载日志目录
  28. command: --server-id=2 --log-bin=slave-bin --binlog-do-db=test_db --binlog-format=row --gtid-mode=ON --enforce-gtid-consistency=ON --skip-slave-start # 从服务器的命令参数
  29. depends_on:
  30. - mysql-master # 确保主服务器先启动

 注意:我使用的mysql用户为默认root,可以自行创建其他用户访问数据库。

在mysql文件夹下执行

docker-compose up -d

 

如上图所示表示mysql创建成功。

主从配置

获取主服务器状态信息

在主服务下执行,进入容器

  1. #进入容器内部
  2. docker-compose exec mysql-master bash
  3. #输入用户密码
  4. mysql -u root -p
  5. #为了避免从服务复制出现权限不足的情况需要执行
  6. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  7. # 查看状态
  8. SHOW MASTER STATUS;

如上图所示,需要记下 FilePosition 的值。

如不配置ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

会出现 如下错误

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.3.150' IDENTIFIED BY '123456'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '123456'' at line 1

配置从服务器复制

在从服务器下执行,进入容器

  1. #进入容器
  2. docker-compose exec mysql-slave bash
  3. #输入用户密码
  4. mysql -u root -p
  5. #配置从服务器复制
  6. CHANGE MASTER TO MASTER_HOST='192.168.3.150', MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3001, MASTER_LOG_FILE='master1-bin.000003', MASTER_LOG_POS=478;

注意

  1. MASTER_HOST='192.168.3.150': 如果在同一个docker 环境下,可以替换成主容器名称,即mysql-master
  2. MASTER_PORT=3001:如果不指定端口默认端口为3306。
  3. MASTER_LOG_FILE='master1-bin.000003', MASTER_LOG_POS=478; 必须指定主服务器的FilePosition 值。

配置成功后可以查看主从状态:

  1. #查看主从配置状态
  2. SHOW REPLICA STATUS\G;

如果从服务器正在运行作为主服务器的复制进程,则应该会看到 Slave_IO_RunningSlave_SQL_Running 字段都显示为 Yes。您还可以查看 Master_Log_FileRead_Master_Log_Pos 字段,以获取关于当前复制位置的信息。如上图所示,已经配置成功。

可能会出现的错误:

 Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

这个错误通常意味着从服务器无法找到在二进制日志索引文件中找到主服务器的第一个日志文件名。

重新初始化从服务器并重新开始复制过程就可以解决。

  1. #停止复制
  2. STOP SLAVE;
  3. #清除从服务器上的复制信息
  4. RESET SLAVE;
  5. #启动复制
  6. START SLAVE;

现在mysql-master为主数据库,mysql-slave为从数据库。实现互为主从,反过来再配置一遍即可。

获取从服务器状态信息

从服务器下执行

  1. #为了避免从服务复制出现权限不足的情况需要执行
  2. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  3. # 查看状态
  4. SHOW MASTER STATUS;

如上图所示,主从信息是有变化的,同时记录 FilePosition 的值。

配置主服务器复制 

在主服务下执行

  1. #配置主服务器复制
  2. CHANGE MASTER TO MASTER_HOST='192.168.3.150', MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3002, MASTER_LOG_FILE='slave-bin.000003', MASTER_LOG_POS=1855;
  3. #开始复制
  4. START SLAVE;
  5. #查看主从配置状态
  6. SHOW REPLICA STATUS\G;

如上图所示,即主从配置成功。

测试主从复制

在其中一个数据添加数据

 另外一个数据库查询

做了个gif。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/388796
推荐阅读
相关标签
  

闽ICP备14008679号