Cenots搭建mysql集群:主从复制

我不是女神ヾ 2023-06-12 05:26 85阅读 0赞

在这里插入图片描述
此处为了演示,由于内存资源有限,采用docker 启动多个mysql容器






















角色 主机机名/ip
master mysql1/172.20.0.2
slave1 mysql2/172.20.0.3
slave2 mysql3/172.20.0.4

1, 启动三个mysql容器

  1. # 创建自定义网络, 使得容器间能通过主机名访问
  2. docker network create br
  3. docker rm -f mysql1
  4. docker run -d -P --name mysql1 \
  5. --net=br -v mysql1:/var/lib/mysql \
  6. -e MYSQL_ROOT_PASSWORD=123456 \
  7. mysql:5.7
  8. docker rm -f mysql2
  9. docker run -d -P --name mysql2 \
  10. --net=br -v mysql2:/var/lib/mysql \
  11. -e MYSQL_ROOT_PASSWORD=123456 \
  12. mysql:5.7
  13. docker rm -f mysql3
  14. docker run -d -P --name mysql3 \
  15. --net=br -v mysql3:/var/lib/mysql \
  16. -e MYSQL_ROOT_PASSWORD=123456 \
  17. mysql:5.7
  18. [root@docker ~]# docker ps
  19. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  20. 60e91267022e mysql:5.7 "docker-entrypoint.s…" 19 seconds ago Up 17 seconds 0.0.0.0:32779->3306/tcp, 0.0.0.0:32778->33060/tcp mysql3
  21. bb4e67d6a4bb mysql:5.7 "docker-entrypoint.s…" 26 seconds ago Up 24 seconds 0.0.0.0:32777->3306/tcp, 0.0.0.0:32776->33060/tcp mysql2
  22. ff207b3b364a mysql:5.7 "docker-entrypoint.s…" 35 seconds ago Up 33 seconds 0.0.0.0:32775->3306/tcp, 0.0.0.0:32774->33060/tcp mysql1

2, 进入容器修改配置

  1. #-------mysql1
  2. docker exec -it mysql1 bash
  3. #进入容器后运行以下命令
  4. cat >> /etc/mysql/mysql.conf.d/mysqld.cnf <<EOF server-id=1 #主库开启binlog日志 log-bin=/var/lib/mysql/mysql-bin EOF
  5. #-------mysql2
  6. docker exec -it mysql2 bash
  7. #进入容器后运行以下命令
  8. cat >> /etc/mysql/mysql.conf.d/mysqld.cnf <<EOF server-id=2 EOF
  9. #-------mysql3
  10. docker exec -it mysql3 bash
  11. #进入容器后运行以下命令
  12. cat >> /etc/mysql/mysql.conf.d/mysqld.cnf <<EOF server-id=3 EOF
  13. #-------重启容器,使得配置生效
  14. docker restart mysql1 mysql2 mysql3

3, 打通mysql-master和mysql-slave

  1. #=======mysql1
  2. grant replication slave on *.* to 'test'@'%' identified by '123456';
  3. flush privileges
  4. mysql> show master status;
  5. +------------------+----------+--------------+------------------+-------------------+
  6. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  7. +------------------+----------+--------------+------------------+-------------------+
  8. | mysql-bin.000001 | 581 | | | |
  9. +------------------+----------+--------------+------------------+-------------------+
  10. 1 row in set (0.00 sec)
  11. #=======mysql2,mysql3: 分别在两台从库(slave)上操作如下命令
  12. change master to master_host='172.20.0.2', master_port=3306, master_user='test', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=581;
  13. flush privileges;
  14. start slave;
  15. mysql> show slave status\G
  16. *************************** 1. row ***************************
  17. Slave_IO_State: Waiting for master to send event
  18. Master_Host: 172.20.0.2
  19. Master_User: test
  20. Master_Port: 3306
  21. Connect_Retry: 60
  22. Master_Log_File: mysql-bin.000001
  23. Read_Master_Log_Pos: 1186
  24. Relay_Log_File: bb4e67d6a4bb-relay-bin.000002
  25. Relay_Log_Pos: 925
  26. Relay_Master_Log_File: mysql-bin.000001
  27. Slave_IO_Running: Yes
  28. Slave_SQL_Running: Yes

4, 测试:在mysql-master写入数据

在mysql-slave上,查看数据是否同步

  1. ################# 1,登陆mysql主节点: mysql1 ################
  2. root@60e91267022e:/# mysql -uroot -p123456 -hmysql1
  3. mysql: [Warning] Using a password on the command line interface can be insecure.
  4. Welcome to the MySQL monitor. Commands end with ; or \g.
  5. Your MySQL connection id is 9
  6. Server version: 5.7.27-log MySQL Community Server (GPL)
  7. Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
  8. Oracle is a registered trademark of Oracle Corporation and/or its
  9. affiliates. Other names may be trademarks of their respective
  10. owners.
  11. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  12. mysql> show databases;
  13. +--------------------+
  14. | Database |
  15. +--------------------+
  16. | information_schema |
  17. | mysql |
  18. | performance_schema |
  19. | sys |
  20. +--------------------+
  21. 4 rows in set (0.01 sec)
  22. mysql> create database test;
  23. Query OK, 1 row affected (0.01 sec)
  24. mysql> use test;
  25. Database changed
  26. mysql> create table per(id int,name varchar(10));
  27. Query OK, 0 rows affected (0.17 sec)
  28. mysql> insert into per values(1,'a'),(2,'b');
  29. Query OK, 2 rows affected (0.08 sec)
  30. Records: 2 Duplicates: 0 Warnings: 0
  31. ################ 2,登陆mysql从节点: mysql2 ################
  32. mysql> ^DBye
  33. root@60e91267022e:/# mysql -uroot -p123456 -hmysql2
  34. mysql: [Warning] Using a password on the command line interface can be insecure.
  35. Welcome to the MySQL monitor. Commands end with ; or \g.
  36. Your MySQL connection id is 11
  37. Server version: 5.7.27 MySQL Community Server (GPL)
  38. Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
  39. Oracle is a registered trademark of Oracle Corporation and/or its
  40. affiliates. Other names may be trademarks of their respective
  41. owners.
  42. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  43. mysql> show databases;
  44. +--------------------+
  45. | Database |
  46. +--------------------+
  47. | information_schema |
  48. | mysql |
  49. | performance_schema |
  50. | sys |
  51. | test |
  52. +--------------------+
  53. 5 rows in set (0.00 sec)
  54. mysql> use test;
  55. Reading table information for completion of table and column names
  56. You can turn off this feature to get a quicker startup with -A
  57. Database changed
  58. mysql> show tables;
  59. +----------------+
  60. | Tables_in_test |
  61. +----------------+
  62. | per |
  63. +----------------+
  64. 1 row in set (0.00 sec)
  65. mysql> select * from per;
  66. +------+------+
  67. | id | name |
  68. +------+------+
  69. | 1 | a |
  70. | 2 | b |
  71. +------+------+
  72. 2 rows in set (0.00 sec)

发表评论

表情:
评论列表 (有 0 条评论,85人围观)

还没有评论,来说两句吧...

相关阅读