本文共 6626 字,大约阅读时间需要 22 分钟。
在生产环境中构建 MySQL 主从架构是一种常见的高可用解决方案。本文将使用 Docker 的方式快速构建 MySQL 主从环境。
docker pull mysql:5.7。docker-compose.yml 文件。mysql/├── docker-compose.yml├── master/│ ├── Dockerfile│ └── my.cnf├── slave/│ ├── Dockerfile│ └── my.cnf
[mysqld]server_id = 101log-bin = mysql-binbinlog_ignore_db = mysqlbinlog_cache_size = 1Mexpire_logs_days = 7binlog_format = mixedlog_slave_updates = 1character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci
[mysqld]server_id = 102log-bin = mysql-binrelay_log = replicas-mysql-relay-binlog_slave_updates = 1binlog_format = mixedread_only = 1character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci
FROM mysql:5.7MAINTAINER zhuangxiaoyanADD ./master/my.cnf /etc/mysql/my.cnf
FROM mysql:5.7MAINTAINER zhuangxiaoyanADD ./slave/my.cnf /etc/mysql/my.cnf
version: '3'services: mysql-master: build: . dockerfile: master/Dockerfile container_name: mysql-master ports: - "3306:3306" volumes: - mysql-master-vol:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: rule_platform MYSQL_USER: ruler MYSQL_PASSWORD: root restart: unless-stopped networks: - mysql-ms-network mysql-slave: build: . dockerfile: slave/Dockerfile container_name: mysql-slave ports: - "3307:3306" volumes: - mysql-slave-vol:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: rule_platform MYSQL_USER: ruler MYSQL_PASSWORD: root restart: unless-stopped networks: - mysql-ms-networknetworks: mysql-ms-network: driver: bridge ipam: config: - subnet: "172.25.0.0/24"
# 在 docker-compose.yml 所在目录下执行docker-compose up -d# 查看构建状态docker-compose ps
# 配置主节点docker-compose exec mysql-master bashmysql -uroot -p -e "grant replication slave on *.* to 'root'@'172.25.0.102' identified by 'root'; flush privileges;"mysql -uroot -p -e "show master status;"
# 配置从节点docker-compose exec mysql-slave bashmysql -uroot -p -e "reset slave;"mysql -uroot -p -e "CHANGE MASTER TO MASTER_HOST='172.25.0.101', MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=600; start slave;"mysql -uroot -p -e "show slave status;"
配置与主从环境类似,同样需要 Docker、Docker Compose 和相关 MySQL 配置文件。
[mysqld]server_id = 1gtid-mode = ONenforce-gtid-consistency = 1binlog_ignore_db = mysqllog-bin = mysql-binbinlog_cache_size = 1Mbinlog_format = mixedexpire_logs_days = 7slave_skip_errors = 1062log_slave_updates = ONread_only = 1
[mysqld]server_id = 2gtid-mode = ONenforce-gtid-consistency = 1binlog_ignore_db = mysqllog-bin = mysql-slave1-binbinlog_cache_size = 1Mbinlog_format = mixedexpire_logs_days = 7slave_skip_errors = 1062relay_log = mysql-relay-binlog_slave_updates = ONread_only = 1
version: '3'services: mysql-master: build: . dockerfile: master/Dockerfile container_name: mysql-master ports: - "33060:3306" volumes: - ./mysql/master/etc:/etc/mysql - ./mysql/master/var/lib:/var/lib/mysql - ./mysql/master/my.cnf:/etc/my.cnf environment: TZ=Asia/Shanghai MYSQL_ROOT_PASSWORD=123456 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci restart: always mysql-slave-1: build: . dockerfile: slave/Dockerfile container_name: mysql-slave-1 ports: - "33070:3306" volumes: - ./mysql/slave1/etc:/etc/mysql - ./mysql/slave1/var/lib:/var/lib/mysql - ./mysql/slave1/my.cnf:/etc/my.cnf environment: TZ=Asia/Shanghai MYSQL_ROOT_PASSWORD=123456 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci restart: always mysql-slave-2: build: . dockerfile: slave/Dockerfile container_name: mysql-slave-2 ports: - "33080:3306" volumes: - ./mysql/slave2/etc:/etc/mysql - ./mysql/slave2/var/lib:/var/lib/mysql - ./mysql/slave2/my.cnf:/etc/my.cnf environment: TZ=Asia/Shanghai MYSQL_ROOT_PASSWORD=123456 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci restart: alwaysnetworks: srm-mysql: driver: bridge ipam: config: - subnet: "173.200.6.0/24"
# 配置主节点docker exec -it mysql-master bashmysql -uroot -p -e "create user 'repl'@'%' identified by 'repl'; grant replication client, replication slave on *.* to 'repl'@'%';"
# 配置从节点docker exec -it mysql-slave-1 bashmysql -uroot -p -e "reset master;"mysql -uroot -p -e "CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_PORT=3306, MASTER_AUTO_POSITION=1; start slave;"
version: "2"services: mha_share: image: debian:jessie volumes: - "./employees_share/:/mha_share/" mha_node: build: ./mha_node image: prontera/mha_node read_only: true mha_manager: build: ./mha_manager image: prontera/mha_manager read_only: true master: image: prontera/mha_node depends_on: - mha_node ports: - "3406:3306" volumes: - "./employees_db/:/docker-entrypoint-initdb.d/:ro" - "./employees_master/lib/:/var/lib/mysql/" - "./employees_master/log/:/var/log/mysql/" - "./employees_master/conf.d/:/etc/mysql/mysql.conf.d/" volumes_from: - mha_share env_file: - ./account.env environment: MYSQL_USER=prontera MYSQL_PASSWORD=123123 slave_1: image: prontera/mha_node depends_on: - master ports: - "3407:3306" volumes: - "./employees_slave_1/lib/:/var/lib/mysql/" - "./employees_slave_1/log/:/var/log/mysql/" - "./employees_slave_1/conf.d/:/etc/mysql/mysql.conf.d/" volumes_from: - mha_share env_file: - ./account.env manager: image: prontera/mha_manager depends_on: - mha_manager - slave_1 volumes_from: - mha_share entrypoint: tailf /dev/null env_file: - ./account.env
转载地址:http://iohfk.baihongyu.com/