原理图:
一、先部署两个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数据库是否被创建
标签:compose,slave,ocker,buffer,大小,mysql,缓冲区,size From: https://www.cnblogs.com/namedgx/p/18224165