2026/4/18 7:32:01
网站建设
项目流程
学校网站建设的风险分析,江苏网站建设效果,学校网站建设与管理办法,企业运营管理流程图Docker搭建Mysql8的主从复制
通过Docker部署Mysql主从复制#xff0c;Docker安装在前篇有#xff0c;直接演示#xff1a;
拉取镜像 # 获取有哪些镜像 docker search mysql # 拉取MySQL镜像 docker pull mysql:8.0.32 # 查看镜像 docker images
主节点的配置
创建数据存…Docker搭建Mysql8的主从复制通过Docker部署Mysql主从复制Docker安装在前篇有直接演示拉取镜像# 获取有哪些镜像 docker search mysql # 拉取MySQL镜像 docker pull mysql:8.0.32 # 查看镜像 docker images主节点的配置创建数据存储目录mkdir -p /docker/mysql/master/data创建日志目录mkdir -p /docker/mysql/master/logs创建配置文件目录mkdir -p /docker/mysql/master/conf进行快速启动 - 查看镜像是否有问题 注不同的版本的配置文件位置不同可通过快速创建查看mysql的对应的配置文件位置进行对应映射。# 快速启动 -d是进行守护进程启动 docker run -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0.32 # 启动成功后进入容器内部拷贝配置文件到宿主主机 docker cp mysql8:/etc/mysql /docker/mysql/master/conf # 删除刚才的容器重新创建容器 docker stop mysql8 docker rm mysql8运行容器docker run -p 3340:3306 --name mysql_master --privilegedtrue \ -v /docker/mysql/master/conf:/etc/mysql/conf.d \ -v /docker/mysql/master/logs:/var/log/mysql \ -v /docker/mysql/master/data:/var/lib/mysql \ -v /etc/localtime:/etc/localtime \ -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0.32 --init-connectSET collation_connectionutf8mb4_0900_ai_ci --init-connectSET NAMES utf8mb4 --skip-character-set-client-handshake进入容器docker ps -a docker exec -it mysql_master /bin/bash docker exec -it mysql_master env LANGC.UTF-8 /bin/bash # 进入容器这种进入避免显示中午乱码 # 打开MySQL输入密码 mysql -uroot -p # 查看数据库 show databases; # 创建数据库 create database 数据库; # 如果远程链接失败可以修改默认密码校验方式第三方工具可以连接上 ALTER USER root% IDENTIFIED WITH mysql_native_password BY 密码;配置远程连接对外连接的# 在MySQL下执行 use mysql; # 创建对外访问的用户和权限 CREATE USER 用户名% IDENTIFIED WITH mysql_native_password BY 密码; # 授权全部的权限范围大 # GRANT ALL ON *.* TO 用户名% WITH GRANT OPTION; # 刷新权限 FLUSH PRIVILEGES; # 退出 exit创建自定义的配置文件主服务器配置文件cd /docker/mysql/master/conf touch my.cnfmy.cnf文件内容[client] # mysql客户端默认字符集 default-character-setutf8mb4 [mysql] default-character-setutf8mb4 [mysqld] # 跳过密码登录 #skip-grant-tables #bind-address 127.0.0.1 init_connectSET collation_connection utf8mb4_general_ci init_connectSET NAMES utf8mb4 # mysql服务端默认字符集 character-set-serverutf8mb4 collation-serverutf8mb4_general_ci skip-character-set-client-handshake # datadir/var/lib/mysql # 主服务器唯一ID 默认是1 server-id1 # 设置不要复制的数据库 binlog-ignore-dbmysql binlog-ignore-dbinformation_schema binlog-ignore-dbperformance_schema # 设置需要复制的数据库先创建好 binlog-do-db数据库名 # 启用二进制日志日志的存放地址(默认是binlog)就是在show master status;看到Filed名字 log-bin/var/lib/mysql/mysql-bin # 主机1 只读 0 读写默认是0 read-only0 # 设置logbin格式 有3种格式 # STATEMENT(函数支持不好) 写指令会出现主从数据不同步now函数 # ROW(行模式大量修改效率不行但支持存储引擎) - 默认的 # MIXED (综合推荐) binlog_formatmixed ## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断。 ## 如1062错误是指一些主键重复1032错误是因为主从数据库数据不一致 slave_skip_errors1062 # 二进制日志过期清理时间默认是0不自动清理 expire_logs_days7 # 单个二进制日志大小 max_binlog_size200M # 设置每隔多少次事务提交操作将这些操作写入二进制日志文件 sync_binlog1 # 使用mysql_native_password插件的认证 # default_authentication_pluginmysql_native_password重启mysql容器docker ps -a docker restart 容器id创建用户并授权给从机主机创建用户# 连接上Mysql服务执行 create user 用户名% identified with mysql_native_password by 密码; # 授权复制的权限 ON后的*.*代表全部的库和表 GRANT REPLICATION SLAVE ON *.* TO 用户名%; # 刷新权限 FLUSH PRIVILEGES; # 如果远程链接失败可以修改默认密码校验方式第三方工具可以连接上 alter user 用户名% identified with mysql_native_password by 密码;查询主机的状态show master status; # 执行上面命令得到 File(binlog日志) Position(接入点) Binlog_Do_DB(要复制的数据库) Binlog_IgnoreDB() # 需要记录一下File、Position从节点配置创建数据目录mkdir -p /docker/mysql/slave/data创建日志目录mkdir -p /docker/mysql/slave/logs创建配置文件目录mkdir -p /docker/mysql/slave/conf创建自定义的配置文件cd /docker/mysql/slave/conf touch my.cnfmysql.cnf文件内容[client] # mysql客户端默认字符集 default-character-setutf8mb4 [mysql] default-character-setutf8mb4 [mysqld] # 跳过密码登录 #skip-grant-tables #bind-address 127.0.0.1 init_connectSET collation_connection utf8mb4_general_ci init_connectSET NAMES utf8mb4 # mysql服务端默认字符集 character-set-serverutf8mb4 collation-serverutf8mb4_general_ci skip-character-set-client-handshake # datadir/var/lib/mysql # 从服务器唯一ID server-id 2 # 开启中继日志 relay-logmysql-relay # 从机1 只读 0 读写默认是0 read-only1 # 启用二进制日志日志的存放地址如果从机变成主机可以继续使用bin日志 # log-binmysql-slave-bin # 使用mysql_native_password插件的认证 # default_authentiction_pluginmysql_native_password运行容器docker run -p 3341:3306 --name mysql_slave --privilegedtrue \ -v /docker/mysql/slave/conf:/etc/mysql/conf.d \ -v /docker/mysql/slave/logs:/var/log/mysql \ -v /docker/mysql/slave/data:/var/lib/mysql \ -v /etc/localtime:/etc/localtime \ -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0.32 --init-connectSET collation_connectionutf8mb4_0900_ai_ci --init-connectSET NAMES utf8mb4 --skip-character-set-client-handshake进入容器docker ps -a docker exec -it mysql_slave /bin/bash配置远程连接对外连接的# 打开MySQL输入密码 mysql -uroot -p # 查看数据库 show databases; # 创建数据库 create database 数据库; # 查看数据库 # 在MySQL下执行 use mysql; # 创建对外访问的用户和权限 CREATE USER 用户名% IDENTIFIED BY 密码; GRANT ALL ON *.* TO 用户名% WITH GRANT OPTION; FLUSH PRIVILEGES; # 退出 exit设置同步信息# 停止同步(之前配置过需要执行) stop slave; # 设置同步 CHANGE MASTER TO MASTER_HOST主机IP地址, MASTER_PORT端口, MASTER_USER主机用户,MASTER_PASSWORD主机用户的密码, MASTER_LOG_FILEbinlog日志名字, MASTER_CONNECT_RETRY30, MASTER_LOG_POS具体的接入点值; # MASTER_CONNECT_RETRY 是如果连接失败重试时间间隔默认60秒如果操作失败需要重新配置执行下面2个命令stop slave; # 停止同步操作 reset master; # 重置主从配置删除之前的中继日志会再生成一份新的开始同步start slave;检查是否成功show slave status \G; # 检查状态 # 如果结果下面的字段为Yes 代表配置成功 - Slave_IO_Running: Yes - Slave_SQL_Running: Yes停止和重置# 从机上执行停止I/O 线程和SQL线程的操作 stop slave; # 从机上执行用于删除SLAVE数据库的relaylog日志文件并重新启用新的relaylog文件 reset slave; # 主机上执行删除所有的binglog日志文件并将日志索引文件清空重新开始所有新的日志文件 reset master;验证# 从主机上创建表、插入SQL语句 # 创建表 CREATE TABLE emp ( id int(11) NOT NULL COMMENT 主键, name varchar(255) DEFAULT NULL COMMENT 员工名, age int(11) DEFAULT NULL COMMENT 年龄, did int(11) DEFAULT NULL COMMENT 部门id, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci COMMENT部门表; INSERT INTO emp (id, name, age, did) VALUES (1, 刘备, 55, 1); # 分别 在主机和从机进行查询该SQL语句 select * from emp; # 如都看到相同的数据代表成功常见问题启动主从同步后常见错误是Slave_IO_Running No 或者 Connecting的情况此时查看下方的Last_IO_ERROR错误日志根据日志中显示的错误信息在网上搜索解决方案即可一 常见错误Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: Client requested master to start replication from position file size解决-- 在从机停止slave SLAVE STOP; -- 在主机查看mater状态 SHOW MASTER STATUS; -- 在主机刷新日志 FLUSH LOGS; -- 再次在主机查看mater状态会发现File和Position发生了变化 SHOW MASTER STATUS; -- 修改从机连接主机的SQL并重新连接即可二启动docker容器后提示WARNING: IPv4 forwarding is disabled. Networking will not work.解决#修改配置文件 vim /usr/lib/sysctl.d/00-system.conf #追加 net.ipv4.ip_forward1 #接着重启网络 systemctl restart network