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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
| 1. 首先在docker平台上启动两个MySQL服务,一个作为主,一个作为从 2. 启动MySQL 主(名字叫mysql-master) --> docker run -p3307:3306 --name mysql-master --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.51 从(名字叫mysql-slave) --> docker run -p3308:3306 --name mysql-slave --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.51 3. 启动完成之后,使用docker ps命令查看当前运行的mysql容器
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 329f0925de00 mysql:5.6.51 "docker-entrypoint.s…" 9 seconds ago Up 7 seconds 0.0.0.0:3308->3306/tcp mysql-slave b6e89b46286f mysql:5.6.51 "docker-entrypoint.s…" 17 seconds ago Up 16 seconds 0.0.0.0:3307->3306/tcp mysql-master
4. 设置mysql-master为主,设置mysql-slave为从
4.1 使用docker命令进入mysql-master容器内部 docker exec -it b6e89b46286f bash 进入容器之后因为容器内部没有安装vim编辑器,所以首先安装vim编辑器 在安装vim之前首先更新一个apt库 所以先执行更新库命令 apt-get update 更新库完成之后在执行安装vim编辑器命令 apt-get install -y vim 如果不先更新apt库,那么vim可能不会安装成功 使用vim编辑器打开mysql的配置文件my.cnf vim /etc/mysql/my.cnf 在my.cnf配置文件中首先就是设置server-id=100 设置一个任意整数即可,是MySQL集群进行编号. 在my.cnf中开启log-bin日志(很重要,MySQL集群,数据同步的关键) log-bin=mysql-bin 配置如下: [mysqld] # MySQL集群编号,不能重复 server-id=100 # 开启二进制日志功能,日志名字随便取 log-bin=mysql-bin 在当前的MySQL主服务器中创建用户,从服务器可以用新创建的用户进行数据同步(也可以直接使用root用户) 我这里不重新创建用户了,直接使用root用户进行数据同步,但是需要将root用户设置成可以进行数据同步 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'%'; 刷新权限 FLUSH PRIVILEGES; 到此为止,主服务器配置完成(配置完成之后最好是重启mysql服务器) 查看主服务器的状态在MySQL的交互界面输入 show master status; mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 360 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) 4.2 使用docker命令进入mysql-slave容器内部
docker exec -it 329f0925de00 bash 他的内部也没有vim所以和主节点安装方式一样,安装vim编辑器 使用vim编辑器打开mysql-slave的配置文件my.cnf vim /etc/mysql/my.cnf 配置如下: [mysqld] # MySQL集群编号,不能重复 server-id=101 # 中继日志 relay_log=edu-mysql-relay-bin
配置完从容器之后,重启从容器,然后计入到容器中,使用myql -uroot -p登陆客户端 4.3 两台容器都配置完成,接下来开始将两个容器关联起来. 4.3.1 分别进入两个容器中使用mysql -uroot -p 登陆进mysql交互环境 4.3.2 在主服务器中使用命令查看当前master服务器状态 show master status; 记录下File和Position设置从服务器时需要用到这两个数据 4.3.3 在从服务器中使用命令关联主服务器,这时需要知道主服务器的IP地址可以使用docker命令查询主服务器的IP地址 查询IP地址 docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master (这条命令是docker命令不能在MySQL交互环境执行,需要在容器外面执行) 4.3.4 执行了主服务器的IP地址之后在从服务器的MySQL交互页面开始关联主服务器 change master to master_host='172.17.0.2', \ master_user='root',\ master_password='123456', \ master_port=3306, \ master_log_file='mysql-bin.000001', \ master_log_pos= 360, \ master_connect_retry=30; 配置说明:
master_host:Master的地址 master_port:Master的端口号,指的是容器的端口号 master_user:用于数据同步的用户 master_password:用于同步的用户的密码 master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值 master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值 master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒 4.3.5 开启slave start slave; 4.3.6 在从服务器中查看主从同步状态 show slave status \G; mysql> show slave status \G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.17.0.2 Master_User: root Master_Port: 3306 Connect_Retry: 30 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 360 Relay_Log_File: edu-mysql-relay-bin.000002 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes # YES为成功 Slave_SQL_Running: Yes # YES为成功 Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 360 Relay_Log_Space: 460 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 100 Master_UUID: 8c7e9e61-a265-11eb-907c-0242ac110002 Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec)
|