[关闭]
@File 2019-10-08T11:13:41.000000Z 字数 3284 阅读 144

mysql 主从复制

web


一、成功案例

1. 创建一个 docker-compose.yml

image_1dkvekkr51fjh1q0q2sg15tqls813.png-7.6kB

2. docker-compose.yml 的内容

  1. version: "3"
  2. services:
  3. mysql-master:
  4. image: mysql:5.7.22
  5. restart: always
  6. container_name: mysql_master
  7. ports:
  8. - 8086:3306
  9. environment:
  10. MYSQL_ROOT_PASSWORD: root
  11. TZ: Asia/Shanghai
  12. volumes:
  13. - ./master/mysql/data:/var/lib/mysql
  14. - ./master/mysql/log:/var/log/mysql
  15. command:
  16. --server-id=8086
  17. --log-bin=mysql-master-bin
  18. links:
  19. - mysql-slave-read
  20. mysql-slave-read:
  21. image: mysql:5.7.22
  22. restart: always
  23. container_name: mysql-slave-read
  24. ports:
  25. - 8087:3306
  26. environment:
  27. MYSQL_ROOT_PASSWORD: root
  28. TZ: Asia/Shanghai
  29. volumes:
  30. - ./slave/mysql/data:/var/lib/mysql
  31. - ./slave/mysql/log:/var/log/mysql
  32. command:
  33. --server-id=8087
  34. --read_only=1

3. 运行 docker-compose

  1. docker-compose up -d

4. 主数据库配置流程

  1. # 创建用户
  2. grant replication slave on *.* to 'slave'@'%' identified by '123456';
  3. # 锁库
  4. FLUSH TABLES WITH READ LOCK
  5. # 查看状态
  6. SHOW MASTER STATUS
  7. # 解锁
  8. UNLOCK TABLES

5. 从数据库配置流程

  1. #停止
  2. STOP SLAVE
  3. # 主数据库配置
  4. change master to master_host='127.0.0.1',
  5. master_user='root',
  6. master_password='root',
  7. master_port=3316,
  8. # 主数据库状态中的值
  9. master_log_file='mysql-master-bin.000004',
  10. master_log_pos=430;
  11. # 开启
  12. START SLAVE
  13. # 查看链接状态
  14. SHOW SLAVE STATUS

二、添加一个从数据库

1. 在 docker-compose 添加新的数据库容器

  1. # 服务名要改
  2. mysql-slave-read2:
  3. image: mysql:5.7.22
  4. restart: always
  5. # 容器名要改
  6. container_name: mysql-slave-read2
  7. ports:
  8. # 映射端口要改
  9. - 8087:3306
  10. environment:
  11. MYSQL_ROOT_PASSWORD: root
  12. TZ: Asia/Shanghai
  13. volumes:
  14. # 映射目录要改
  15. - ./slave/mysql/data:/var/lib/mysql
  16. - ./slave/mysql/log:/var/log/mysql
  17. command:
  18. # id要改
  19. --server-id=8087
  20. --read_only=1
  1. links:
  2. # 原有的
  3. - mysql-slave-read
  4. # 新增的
  5. - mysql-slave-read2

3. 重新运行 docker-compose

  1. docker-compose up -d

三、 更多配置

  1. version: "3"
  2. services:
  3. mysql-master:
  4. image: mysql:5.7.22
  5. restart: always
  6. hostname: mysql-master
  7. container_name: mysql_master
  8. ports:
  9. - 3316:3306
  10. environment:
  11. MYSQL_ROOT_PASSWORD: root
  12. TZ: Asia/Shanghai
  13. volumes:
  14. - ./master/mysql/data:/var/lib/mysql
  15. - ./master/mysql/log:/var/log/mysql
  16. command:
  17. --server_id=100
  18. --log-bin=mysql-master-bin
  19. --sync_binlog=1
  20. --binlog-ignore-db=mysql
  21. --binlog_format=mixed
  22. --expire_logs_days=7
  23. --default-authentication-plugin=mysql_native_password
  24. --character-set-server=utf8mb4
  25. --collation-server=utf8mb4_general_ci
  26. --explicit_defaults_for_timestamp=true
  27. --lower_case_table_names=1
  28. links:
  29. - mysql-slave-read
  30. mysql-slave-read:
  31. image: mysql:5.7.22
  32. restart: always
  33. hostname: mysql-slave-read
  34. container_name: mysql-slave-read
  35. ports:
  36. - 3317:3306
  37. environment:
  38. MYSQL_ROOT_PASSWORD: root
  39. TZ: Asia/Shanghai
  40. volumes:
  41. - ./slave/mysql/data:/var/lib/mysql
  42. - ./slave/mysql/log:/var/log/mysql
  43. command:
  44. --server_id=200
  45. --read_only=1
  46. --binlog-ignore-db=mysql
  47. --default-authentication-plugin=mysql_native_password
  48. --character-set-server=utf8mb4
  49. --collation-server=utf8mb4_general_ci
  50. --explicit_defaults_for_timestamp=true
  51. --lower_case_table_names=1
  52. mysql-slave-back:
  53. image: mysql:5.7.22
  54. restart: always
  55. hostname: mysql-slave-back
  56. container_name: mysql-slave-back
  57. ports:
  58. - 3318:3306
  59. environment:
  60. MYSQL_ROOT_PASSWORD: root
  61. TZ: Asia/Shanghai
  62. volumes:
  63. - ./slave-back/mysql/data:/var/lib/mysql
  64. - ./slave-back/mysql/log:/var/log/mysql
  65. command:
  66. --server_id=300
  67. --log-bin=slave-back-bin
  68. --default-authentication-plugin=mysql_native_password
  69. --character-set-server=utf8mb4
  70. --collation-server=utf8mb4_general_ci
  71. --explicit_defaults_for_timestamp=true
  72. --lower_case_table_names=1
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注