Docker 环境 MySQL8 主从配置
一 准备工作
1.安装Docker
2.创建数据及配置存放目录
1 2 3 4 5 6 7 8 9 10 | # 根据自己的习惯设定存放路径 # 创建主库数据存放目录 mkdir -p代表文件不存在即创建 mkdir - p / home / docker / mysql / master / data # 创建主库配置存放目录 mkdir - p / home / docker / mysql / master / conf # 创建从库1数据存放目录 mkdir - p / home / docker / mysql / slave1 / data # 创建从库1配置存放目录 mkdir - p / home / docker / mysql / slave1 / conf |
3.要安装mysql8,必须在之前创建的conf文件夹中先创建my.cnf作为mysql8的配置文件
master库和slave库配置文件my.cnf是几乎一样的,只要server-id不一致即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | [mysqld] pid - file = / var / run / mysqld / mysqld.pid socket = / var / run / mysqld / mysqld.sock datadir = / var / lib / mysql secure - file - priv = NULL # Disabling symbolic-links is recommended to prevent assorted security risks symbolic - links = 0 <br>port = 3307 # 主库的端口可以使用默认3306,从库的端口必须和主库不一致<br> # 服务器唯一ID,默认是1, 要和slave库不同 server - id = 1 # 启用二进制日志 log - bin = binlog # 从库追踪主库的日志文件名开头,有些数据库是mysql-bin,有些是binlog,具体可以在主库mysql环境下输入mysql> show master status查看 # 最大连接数 max_connections = 10000 # 设置默认时区, # default-time_zone='+8:00' # 0:区分大小写 # 1:不区分大小写 # lower_case_table_names=1 |
4.docker中安装mysql8
主库命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | sudo docker run - - name mysql_master \ - d - - network = host \ - v / home / docker / mysql / master / data: / var / lib / mysql \ - v / home / docker / mysql / master / conf / my.cnf: / etc / mysql / my.cnf \ - e MYSQL_ROOT_PASSWORD = 111111 \ mysql: 8 注释: 第一行:docker启动后的名字 第二行:docker直接使用服务器的网络端口映射 第三行:docker里面的数据映射到服务器本地的路径 第四行:docker里面加载使用的cnf文件映射到服务器本地的路径 第五行:设置docker中mysql的root初始密码 第六行:docker使用的镜像:版本 |
从库命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | sudo docker run - - name mysql_slave1 \ - d - - network = host \ - v / home / docker / mysql / slave1 / data: / var / lib / mysql \ - v / home / docker / mysql / slave1 / conf / my.cnf: / etc / mysql / my.cnf \ - e MYSQL_ROOT_PASSWORD = 111111 \ mysql: 8 注释: 第一行:docker启动后的名字 第二行:docker直接使用服务器的网络端口映射 第三行:docker里面的数据映射到服务器本地的路径 第四行:docker里面加载使用的cnf文件映射到服务器本地的路径 第五行:设置docker中mysql的root初始密码 第六行:docker使用的镜像:版本 |
5.测试远程主从数据库连接状况
进入docker命令:使用docker名称或者id
1 | docker exec - it mysql_master / bin / bash |
进入docker后试着进入mysql8,部分数据库可能会出现无法登录的状态,这个需要在上述的mysql配置文件my.cnf 文件中,在[mysqld] ,在其后面添加 skip-grant-tables
同理,从属数据库也是同样的方法测试.
别忘了加入skip-grant-tables后进入mysql重新设置密码后,再flush privileges,之后从my.cnf中再删掉这行skip-grant-tables
6.在主库创建从库访问主库的账户
1 2 3 4 | create user 'myslave' @ '%' identified by '111111' ; grant replication slave on * . * to 'myslave' @ '%' ; # *.*代表所有的数据库 |
7.查看master机器的状态
1 | SHOW MASTER STATUS |
File栏下的binlog.000103就是从库要追踪的主库的日志文件
position栏的数字就是追踪的起始位置
8.从库设置master信息
进入从库的docker,再进入mysql环境:
1 2 3 4 5 6 | CHANGE MASTER TO MASTER_HOST = '192.168.1.175' , # 主库的IP地址 MASTER_USER = 'mysalve' , # 主库设置的从库访问用户名 MASTER_PASSWORD = '111111' , # 密码 MASTER_LOG_FILE = 'binlog.000103' , MASTER_LOG_POS = 28862 ; |
9.开始同步
1 2 3 4 5 | # 开始同步 start slave; # 查看同步状态 show slave status \G; |
看到两个yes状态就是正常运行状态.
注意:在主库数据在从库进行数据备份,有冷备份和热备份两种,冷备份就是先要锁定主库的数据库,再导出,再导入到从库数据库,这样两个数据库可以保证是在同一个起点,别忘了解锁主库数据,之后主库和从库的数据就完全一致了.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通