当前位置:   article > 正文

docker部署MySQL8.4.0主从复制_docker安装mysql8.4

docker安装mysql8.4

网上部署mysql的教程很多,但是关于最新版mysql8.4.0的资料还是比较少的。所以我就做了这篇教程,提升一下熟练度,也供大家参考一下。这篇教程非常适合手残党,只要跟着步骤走,复制即可实现。

开发软件:VMware+FinalShell

1.docker创建mysql容器

主服务器3306端口

sudo docker run -d --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -v /opt/mysql_data_master:/var/lib/mysql -v /opt/mysql_conf_master:/etc/mysql/conf.d -p 3306:3306 mysql:8.4.0

从服务器3307端口

sudo docker run -d --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -v /opt/mysql_data_slave:/var/lib/mysql -v /opt/mysql_conf_slave:/etc/mysql/conf.d -p 3307:3306 mysql:8.4.0

关闭防火墙(一定要执行,防止Replica_IO_Running为No的现象)

  1. #关闭防火墙
  2. systemctl stop firewalld
  3. #查看防火墙状态
  4. systemctl status firewalld

执行效果:

参数说明:
-p 3306:3306: 这个选项将容器的3306端口映射到主机的3306端口。这样,你可以通过主机的3306端口访问MySQL容器

-v /opt/mysql_data_master:/var/lib/mysql: 这个选项指定了一个数据卷的映射。将主机的/opt/mysql_data_master目录映射到容器的/var/lib/mysql目录,这样MySQL的数据文件将会存储在主机上,以便持久化保存。

-v /opt/mysql_conf_master:/etc/mysql/conf.d: 这个选项指定了另一个数据卷的映射。将主机的/opt/mysql_conf_master目录映射到容器的/etc/mysql/conf.d目录,这样你可以在主机上配置MySQL的配置文件。

注:此处引自参考资料第一条

检查mysql容器是否创建成功

docker ps
2.修改配置

由于启动容器的时候做了做了数据和配置的挂载,因此只需在本地/opt/mysql_conf_master修改配置即可映射到容器内部

a.用文本编辑器进行配置

  1. #切换到本地主库配置目录
  2. cd /opt/mysql_conf_master
  3. #创建并修改配置文件
  4. vim my.cnf
  5. #输入i,进入插入模式
  6. #建议在第三至第四行将下列配置复制进去
  7. #建议后期再删除不需要的配置
  8. #主库配置
  9. [mysql]
  10. #设置mysql客户端默认字符集
  11. default-character-set=UTF8MB4
  12. [mysqld]
  13. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  14. init_connect='SET collation_connection = utf8_unicode_ci'
  15. init_connect='SET NAMES utf8'
  16. #设置3306端口
  17. port=3306
  18. #允许最大连接数
  19. max_connections=200
  20. #允许连接失败的次数
  21. max_connect_errors=10
  22. #服务端使用的字符集默认为8比特编码的latin1字符集
  23. character-set-server=UTF8MB4
  24. #开启查询缓存
  25. explicit_defaults_for_timestamp=true
  26. #创建新表时将使用的默认存储引擎
  27. default-storage-engine=INNODB
  28. #等待超时时间秒
  29. wait_timeout=60
  30. #交互式连接超时时间秒
  31. interactive-timeout=600
  32. #使用mysql_native_password验证密码
  33. mysql_native_password=on
  34. #主服务器唯一ID
  35. server-id=4
  36. #启用二进制日志
  37. log-bin=mysql-bin
  38. #设置不要复制的数据库(可设置多个)
  39. binlog-ignore-db=mysql
  40. binlog-ignore-db=information_schema
  41. #设置需要复制的数据库需要复制的主数据库名字
  42. binlog-do-db=myDatabase
  43. [mysqld_safe]
  44. log-error=/var/log/mysql/mysql.log
  45. pid-file=/var/run/mysql/mysql.pid
  46. #粘贴完毕后,按左上角esc 输入:wq 按enter键保存
  47. #切换到本地从库配置目录
  48. cd /opt/mysql_conf_slave
  49. #创建并修改配置文件
  50. vim my.cnf
  51. #输入i,进入插入模式
  52. #建议在第三至第四行将下列配置复制进去
  53. #建议后期再删除不需要的配置
  54. #从库配置
  55. [mysql]
  56. #设置mysql客户端默认字符集
  57. default-character-set=UTF8MB4
  58. [mysqld]
  59. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  60. init_connect='SET collation_connection = utf8_unicode_ci'
  61. init_connect='SET NAMES utf8'
  62. #设置3306端口
  63. port=3306
  64. #允许最大连接数
  65. max_connections=200
  66. #允许连接失败的次数
  67. max_connect_errors=10
  68. #服务端使用的字符集默认为8比特编码的latin1字符集
  69. character-set-server=UTF8MB4
  70. #开启查询缓存
  71. explicit_defaults_for_timestamp=true
  72. #创建新表时将使用的默认存储引擎
  73. default-storage-engine=INNODB
  74. #等待超时时间秒
  75. wait_timeout=60
  76. #交互式连接超时时间秒
  77. interactive-timeout=600
  78. #使用mysql_native_password验证密码
  79. mysql_native_password=on
  80. #从服务器唯一ID
  81. server-id=44
  82. #启用中继日志
  83. relay-log=mysql-relay
  84. #使得更新的数据写进二进制日志中
  85. log-slave-updates=1
  86. #需要主从复制的数据库 ,如多个则重复配置
  87. replicate-do-db=myDatabase
  88. #复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) ,如多个则重复配置
  89. binlog-ignore-db=mysql
  90. #为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
  91. binlog_cache_size=1M
  92. #主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
  93. binlog_format=row
  94. #配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动删除。
  95. binlog_expire_logs_seconds=2592000
  96. #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors
  97. #如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
  98. slave_skip_errors=1062
  99. #relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件
  100. relay_log=replicas-mysql-relay-bin
  101. log_slave_updates=ON
  102. #防止改变数据(只读操作,除了特殊的线程)
  103. read_only=ON
  104. [mysqld_safe]
  105. log-error=/var/log/mysql/mysql.log
  106. pid-file=/var/run/mysql/mysql.pid
  107. #粘贴完毕后,按左上角esc 输入:wq 按enter键保存

b.用FinalShell进行配置

  1. /opt/mysql_conf_master
  2. /opt/mysql_conf_slave

右击新建文件,图中多了一个字

双击文件,图中多了一个字

将下列配置粘贴进去并保存

  1. #主库配置
  2. [mysql]
  3. #设置mysql客户端默认字符集
  4. default-character-set=UTF8MB4
  5. [mysqld]
  6. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  7. init_connect='SET collation_connection = utf8_unicode_ci'
  8. init_connect='SET NAMES utf8'
  9. #设置3306端口
  10. port=3306
  11. #允许最大连接数
  12. max_connections=200
  13. #允许连接失败的次数
  14. max_connect_errors=10
  15. #服务端使用的字符集默认为8比特编码的latin1字符集
  16. character-set-server=UTF8MB4
  17. #开启查询缓存
  18. explicit_defaults_for_timestamp=true
  19. #创建新表时将使用的默认存储引擎
  20. default-storage-engine=INNODB
  21. #等待超时时间秒
  22. wait_timeout=60
  23. #交互式连接超时时间秒
  24. interactive-timeout=600
  25. #使用mysql_native_password验证密码
  26. mysql_native_password=ON
  27. #主服务器唯一ID
  28. server-id=4
  29. #启用二进制日志
  30. log-bin=mysql-bin
  31. #设置不要复制的数据库(可设置多个)
  32. binlog-ignore-db=mysql
  33. binlog-ignore-db=information_schema
  34. #设置需要复制的数据库需要复制的主数据库名字
  35. binlog-do-db=myDatabase
  36. [mysqld_safe]
  37. log-error=/var/log/mysql/mysql.log
  38. pid-file=/var/run/mysql/mysql.pid

同样的,在/opt/mysql_conf_slave文件下新建my.cnf文件,粘贴下列配置并保存

  1. #从库配置
  2. [mysql]
  3. #设置mysql客户端默认字符集
  4. default-character-set=UTF8MB4
  5. [mysqld]
  6. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  7. init_connect='SET collation_connection = utf8_unicode_ci'
  8. init_connect='SET NAMES utf8'
  9. #设置3306端口
  10. port=3306
  11. #允许最大连接数
  12. max_connections=200
  13. #允许连接失败的次数
  14. max_connect_errors=10
  15. #服务端使用的字符集默认为8比特编码的latin1字符集
  16. character-set-server=UTF8MB4
  17. #开启查询缓存
  18. explicit_defaults_for_timestamp=true
  19. #创建新表时将使用的默认存储引擎
  20. default-storage-engine=INNODB
  21. #等待超时时间秒
  22. wait_timeout=60
  23. #交互式连接超时时间秒
  24. interactive-timeout=600
  25. #使用mysql_native_password验证密码
  26. mysql_native_password=ON
  27. #从服务器唯一ID
  28. server-id=44
  29. #启用中继日志
  30. relay-log=mysql-relay
  31. #使得更新的数据写进二进制日志中
  32. log-slave-updates=1
  33. #需要主从复制的数据库 ,如多个则重复配置
  34. replicate-do-db=myDatabase
  35. #复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) ,如多个则重复配置
  36. binlog-ignore-db=mysql
  37. #为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
  38. binlog_cache_size=1M
  39. #主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
  40. binlog_format=row
  41. #配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动删除。
  42. binlog_expire_logs_seconds=2592000
  43. #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors
  44. #如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
  45. slave_skip_errors=1062
  46. #relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件
  47. relay_log=replicas-mysql-relay-bin
  48. log_slave_updates=ON
  49. #防止改变数据(只读操作,除了特殊的线程)
  50. read_only=ON
  51. [mysqld_safe]
  52. log-error=/var/log/mysql/mysql.log
  53. pid-file=/var/run/mysql/mysql.pid

注:此处引自参考资料第二条

修改完主从服务器之后一定要重启,重启才能生效

  1. docker restart mysql-master;
  2. docker restart mysql-slave;

3.创建用户并授权

根据容器名进入容器内部

docker exec -it mysql-master bash     #mysql-master是mysql容器的名字。

用root账号登录mysql

mysql -uroot -p123456   #用户名和密码在创建容器的时候就设置了 root 123456

切换数据库并创建用户及授权

  1. #切换mysql数据库
  2. use mysql;
  3. #创建用户slave并授权,slave为用户名,通配符%表示任意ip,密码为123456
  4. create user 'slave'@'%' identified with mysql_native_password by '123456';
  5. #给slave用户授权
  6. grant replication slave on *.* to 'slave'@'%';
  7. #刷新权限
  8. flush privileges;
  9. #查询主服务器状态,并记录FilePosition的值
  10. show binary log status;
  11. #注意:执行完此步骤后退出主数据库,防止再次操作导致FilePosition的值发生变化
  12. exit;
  13. #退出mysql-master容器
  14. exit

注:此处引自参考资料第二条

执行结果:

4.配置从服务器开启复制状态
  1. #进入从服务器容器
  2. docker exec -it mysql-slave bash
  3. #登录从服务器
  4. mysql -uroot -p123456
  5. #如若之前同步过可执行改行代码
  6. STOP REPLICA;
  7. RESET REPLICA;
  8. #设置要复制数据的主服务器
  9. CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.200.128', #主服务器ip
  10. SOURCE_PORT=3306, #主服务器端口号
  11. SOURCE_USER='slave', #主服务器授权复制的用户
  12. SOURCE_PASSWORD='123456', #授权用户的密码
  13. SOURCE_LOG_FILE='mysql-bin.000001', #之前记录的file值
  14. SOURCE_LOG_POS=158; #之前记录的position值
  15. #开始复制主服务器数据
  16. START REPLICA;
  17. #查看从库复制情况
  18. SHOW REPLICA STATUS\G;

执行效果:

关键属性:

当这些关键属性与图中一致时即可

5.测试

主库中配置的:    #设置需要复制的数据库需要复制的主数据库名字binlog-do-db=myDatabase

从库中配置的:  replicate-do-db=myDatabase  #设置需要复制的数据库需要复制的主数据库名字

建库:

建表:

插入数据:

到此就成功了!

记得执行前的网络设置一定是要能ping通的,如果网络问题可以再查查资料。

如有不正确的地方,希望大家多多多包涵,在评论区指出,这样就可以避免错误,谢谢大家!

参考资料:

1.docker中同时部署mysql5.7 和mysq8.1- sudoks

2.Docker部署Mysql8.0.20并配置主从复制-C3Stones

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/781652
推荐阅读
相关标签
  

闽ICP备14008679号