• Docker 实现 MySQL 一主一从配置


    1、新建主服务器容器实例,端口: 3307

    1. docker run \
    2. -p 3307:3306 \
    3. --name mysql-master \
    4. -v /var/docker/mysql-master/log:/var/log/mysql \
    5. -v /var/docker/mysql-master/data:/var/lib/mysql \
    6. -v /var/docker/mysql-master/conf:/etc/mysql \
    7. --privileged=true \
    8. -e MYSQL_ROOT_PASSWORD=123456 \
    9. -d mysql:5.7

    2、进入 /var/docker/mysql-master/conf 目录下新建 my.cnf

    vim my.cnf

    1. [client]
    2. # 设置客户端监听的端口
    3. port=3307
    4. # 设置字符集类型
    5. default-character-set=utf8mb4
    6. [mysqld]
    7. port=3306
    8. # 默认使用的字符集
    9. character_set_server=utf8mb4
    10. collation-server=utf8mb4_unicode_ci
    11. init_connect='SET NAMES utf8mb4'
    12. explicit_defaults_for_timestamp=true
    13. default-storage-engine=Innodb
    14. server_id=11
    15. # 指定不需要同步的数据库名称
    16. binlog-ignore-db=mysql
    17. # 开启二进制日志功能
    18. log-bin=mall-mysql-bin
    19. # 设置二进制日志使用内存大小
    20. binlog_cache_size=1M
    21. # 设置使用的二进制日志格式(mixed,statement,row)
    22. binlog_format=mixed
    23. # 二进制日志过期清理时间。默认值为0,表示不自动清理。
    24. expire_logs_days=7
    25. # 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
    26. slave_skip_errors=1062

     3、修改完配置后重启 master 实例

    docker restart mysql-master

    4、进入 mysql-master 容器

    docker exec -it mysql-master /bin/bash

     5、进入 mysql

    mysql -urtoo -p

    查询 mysql 字符集: 

    SHOW VARIABLES LIKE 'character%';

    6、master容器实例内创建具有复制权限的账号

    1. CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    2. GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

     7、新建从服务器容器实例 3308

    1. docker run \
    2. -p 3308:3306 \
    3. --name mysql-slave \
    4. -v /var/docker/mysql-slave/log:/var/log/mysql \
    5. -v /var/docker/mysql-slave/data:/var/lib/mysql \
    6. -v /var/docker/mysql-slave/conf:/etc/mysql \
    7. --privileged=true \
    8. -e MYSQL_ROOT_PASSWORD=123456 \
    9. -d mysql:5.7

     

     8、进入 /var/docker/mysql-slave/conf目录下新建 my.cnf

    1. [client]
    2. port=3308
    3. default-character-set=utf8mb4
    4. [mysqld]
    5. port=3306
    6. character_set_server=utf8mb4
    7. collation-server=utf8mb4_unicode_ci
    8. init_connect='SET NAMES utf8mb4'
    9. explicit_defaults_for_timestamp=true
    10. default-storage-engine=Innodb
    11. server_id=12
    12. binlog-ignore-db=mysql
    13. # 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
    14. log-bin=mall-mysql-slave1-bin
    15. # 设置二进制日志使用内存大小
    16. binlog_cache_size=1M
    17. binlog_format=mixed
    18. # 二进制日志过期清理时间。默认值为0,表示不自动清理。
    19. expire_logs_days=7
    20. # 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    21. slave_skip_errors=1062
    22. # relay_log配置中继日志
    23. relay_log=mall-mysql-relay-bin
    24. # log_slave_updates表示slave将复制事件写进自己的二进制日志
    25. log_slave_updates=1
    26. read_only=1

     9、重启 slave 实例

    docker restart mysql-slave

     10、在主数据库中查看主从同步状态

    show master status;

     

     11、进入 mysql-slave 容器中配置主从复制

    1. change master to master_host='宿主机ip',
    2. master_user='slave',
    3. master_password='123456',
    4. master_port=3307,
    5. master_log_file='mall-mysql-bin.000004',
    6. master_log_pos=617,
    7. master_connect_retry=30;

     主从复制命令参数说明
    master_host  主数据库的IP地址;
    master_port  主数据库的运行端口;
    master_user  在主数据库创建的用于同步数据的用户账号;
    master_password  在主数据库创建的用于同步数据的用户密码;
    master_log_file  指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
    master_log_pos  指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
    master_connect_retry  连接失败重试的时间间隔,单位为秒。

    12、在从数据库中查看主从同步状态 

    show slave status \G;

     

    1. mysql> show slave status \G
    2. *************************** 1. row ***************************
    3. Slave_IO_State:
    4. Master_Host: 192.168.11.12
    5. Master_User: slave
    6. Master_Port: 3307
    7. Connect_Retry: 30
    8. Master_Log_File: mall-mysql-bin.000003
    9. Read_Master_Log_Pos: 313
    10. Relay_Log_File: mall-mysql-relay-bin.000001
    11. Relay_Log_Pos: 4
    12. Relay_Master_Log_File: mall-mysql-bin.000003
    13. Slave_IO_Running: No
    14. Slave_SQL_Running: No
    15. Replicate_Do_DB:
    16. Replicate_Ignore_DB:
    17. Replicate_Do_Table:
    18. Replicate_Ignore_Table:
    19. Replicate_Wild_Do_Table:
    20. Replicate_Wild_Ignore_Table:
    21. Last_Errno: 0
    22. Last_Error:
    23. Skip_Counter: 0
    24. Exec_Master_Log_Pos: 313
    25. Relay_Log_Space: 154
    26. Until_Condition: None
    27. Until_Log_File:
    28. Until_Log_Pos: 0
    29. Master_SSL_Allowed: No
    30. Master_SSL_CA_File:
    31. Master_SSL_CA_Path:
    32. Master_SSL_Cert:
    33. Master_SSL_Cipher:
    34. Master_SSL_Key:
    35. Seconds_Behind_Master: NULL
    36. Master_SSL_Verify_Server_Cert: No
    37. Last_IO_Errno: 0
    38. Last_IO_Error:
    39. Last_SQL_Errno: 0
    40. Last_SQL_Error:
    41. Replicate_Ignore_Server_Ids:
    42. Master_Server_Id: 0
    43. Master_UUID:
    44. Master_Info_File: /var/lib/mysql/master.info
    45. SQL_Delay: 0
    46. SQL_Remaining_Delay: NULL
    47. Slave_SQL_Running_State:
    48. Master_Retry_Count: 86400
    49. Master_Bind:
    50. Last_IO_Error_Timestamp:
    51. Last_SQL_Error_Timestamp:
    52. Master_SSL_Crl:
    53. Master_SSL_Crlpath:
    54. Retrieved_Gtid_Set:
    55. Executed_Gtid_Set:
    56. Auto_Position: 0
    57. Replicate_Rewrite_DB:
    58. Channel_Name:
    59. Master_TLS_Version:
    60. 1 row in set (0.00 sec)

    13、在从数据库中开启主从同步

    start slave;

  • 相关阅读:
    第七篇 基于JSP 技术的网上购书系统——新品上架、推荐产品、在线留言、搜索功能实现(网上商城、仿淘宝、当当、亚马逊)
    每日一题_CodeForces_22B
    设计一款可扩展和基于windows系统的一键处理表格小工具思路
    yolov8 opencv模型部署(C++版)
    5分钟安装Kubernetes+带你轻松安装istio服务网格指南
    注解(Annotation)基础
    elementUI文档的小细节怎么实现?
    二叉树高度
    视频监控/视频汇聚/安防视频监控平台EasyCVR如何将默认快照的raw格式改为jpg/base64格式?
    某知乎x-zse-96参数解析2022/08/09首发
  • 原文地址:https://blog.csdn.net/qq_40880022/article/details/132698709