docker compose 部署mysql主从。并优化参数。

原理图:

 

 

一、先部署两个mysql 可以跨机器 也可以同一台  

准备两个mysql.yml文件和my.cnf配置文件 (yml文件我放一起 可以自行拆开部署)

复制代码
version: '3.1'
services:
  mysql:
    image: mysql:8
    restart: always
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: aaaa1111
      TZ: Asia/Shanghai
      LANG: C.UTF-8
    ports:
      - 3306:3306
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./data:/var/lib/mysql                           #放mysql主数据
      - ./conf:/etc/mysql/conf.d                        #主配置文件
      - ./bk:/opt/mysql/bk                              #mysql备份文件,可以mysqldump下来的备份文件放这

  mysql_slave:
    image: mysql:8
    restart: always
    container_name: mysql_slave
    environment:
      MYSQL_ROOT_PASSWORD: aaaa1111
      TZ: Asia/Shanghai
      LANG: C.UTF-8
    ports:
      - 3307:3306
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./data2:/var/lib/mysql                #mysql从数据文件
      - ./conf2:/etc/mysql/conf.d             #从配置文件
复制代码

 

二、准备两个my.cnf配置文件 对应上面路径

第一份配置 my.cnf

复制代码
[client]
default-character-set=utf8

[mysqld]
#禁用DNS反向解析
skip-name-resolve
default-time-zone = '+08:00'
#MyISAM存储引擎的索引缓存大小
key_buffer_size=512M
#最大连接数限制
max_connections=500
#排序缓冲区大小
sort_buffer_size=32M
#InnoDB存储引擎的缓冲池大小
innodb_buffer_pool_size=2G
#批量插入缓冲区大小
bulk_insert_buffer_size = 256M
#临时表大小
tmp_table_size = 256M
#读取缓冲区大小
read_buffer_size = 8M
#随机读取缓冲区大小
read_rnd_buffer_size = 32M
#InnoDB日志文件的大小
innodb_log_file_size=256M
#InnoDB日志缓冲区大小
innodb_log_buffer_size=12M
#InnoDB日志刷新策略
innodb_flush_log_at_trx_commit=2
#不区分大小写
lower_case_table_names=1
#设置SQL模式
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#默认字符集
character-set-server = utf8mb4
#默认字符集排序规则
collation-server = utf8mb4_general_ci
#启用严格模式
explicit_defaults_for_timestamp = true
#最大允许的网络数据包大小
max_allowed_packet = 128M
#最大binlog存储数量
binlog_expire_logs_seconds = 432000
#binlog保留天数
expire_logs_days = 5

#skip-grant-tables  无密码登录mysql

#mysql主从id 自定义
server-id=100
#需要开启binlog log-bin=mysql-bin
复制代码

 

第二份配置 my.cnf

复制代码
[client]
default-character-set=utf8

[mysqld]
#禁用DNS反向解析
skip-name-resolve
default-time-zone = '+08:00'
#MyISAM存储引擎的索引缓存大小
key_buffer_size=512M
#最大连接数限制
max_connections=500
#排序缓冲区大小
sort_buffer_size=32M
#InnoDB存储引擎的缓冲池大小
innodb_buffer_pool_size=2G
#批量插入缓冲区大小
bulk_insert_buffer_size = 256M
#临时表大小
tmp_table_size = 256M
#读取缓冲区大小
read_buffer_size = 8M
#随机读取缓冲区大小
read_rnd_buffer_size = 32M
#InnoDB日志文件的大小
innodb_log_file_size=256M
#InnoDB日志缓冲区大小
innodb_log_buffer_size=12M
#InnoDB日志刷新策略
innodb_flush_log_at_trx_commit=2
#不区分大小写
lower_case_table_names=1
#设置SQL模式
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#默认字符集
character-set-server = utf8mb4
#默认字符集排序规则
collation-server = utf8mb4_general_ci
#启用严格模式
explicit_defaults_for_timestamp = true
#最大允许的网络数据包大小
max_allowed_packet = 128M
#最大binlog存储数量
binlog_expire_logs_seconds = 432000
#binlog保留天数
expire_logs_days = 5

#skip-grant-tables  无密码登录mysql
#mysql主从id 自定义
server-id=200
#需要开启binlog log-bin=mysql-bin

#slave设置为只读(具有super权限的用户除外) 
log_slave_updates=1   
 
复制代码

 

三、启动mysql

docker compose -f ****.yml up -d 

 

 

四、进入主库执行

主库操作:

-- 创建slave用户
CREATE USER 'mysql_slave'@'%';
-- 设置密码
ALTER USER 'mysql_slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'mysql_slave'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

随后主库执行 后面从库能用到File值 和position值 。 注意 这两个值在做主从的过程中不能有变化, 如果每次执行不一样,说明主库一直在读写操作 先停掉业务。

SHOW MASTER STATUS;

 

 

 

五、进入从库操作

5.1从库操作:

CHANGE MASTER TO MASTER_HOST='10.10.10.10',          #指定主库ip
MASTER_USER='mysql_slave',MASTER_PASSWORD='123456', MASTER_PORT=3306,     #指定主库创建的账号密码 
MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=17898411;               #指定主库刚查询到的file 

 

 

5.2 从库查询状态

Slave_IO_Running、Slave_SQL_Running结果为no

show slave status \G;

 

5.3开启主从

从库操作:

start slave;

 通过如下看出Slave_IO_Running、Slave_SQL_Running结果为yes,说明主从开启成功

如果不是两个yes 。 重新操作     STOP SLAVE;  停止主从

 

 

 

 

六、验证

主库操作:

创建数据库

 

 

从库操作验证:

 进数据库查看 ddd数据库是否被创建

posted @   mrdongdong  阅读(913)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示