1.Docker mysql 搭建主从架构

1.Docker 搭建主服务器

docker run -d \
-p 3307:3306 \
-v /Users/guaguaerhao/docker/mysql-master-slave/master/conf:/etc/mysql/conf.d \
-v /Users/guaguaerhao/docker/mysql-master-slave/master/data:/var/lib/mysql \
-v /Users/guaguaerhao/docker/mysql-master-slave/master/log:/var/log/mysql \
-v /Users/guaguaerhao/docker/mysql-master-slave/master/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=rootroot \
--name atguigu-mysql-master \
-d mysql:8.0.33 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci

2.配置my.cnf

[mysqld]
# 服务器唯一id,默认值为1
server-id=1
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
#binlog-do-db=mytestdb
#设置不需要复制的数据库
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema

binlog 格式说明:
binlog_format=STATEMENT:日志记录的是主机数据库的写指令,性能高,但now()之类的函数以及获取系统参数的操作会出现主从数据不同步的问题。
binlog_format=ROW(默认):日志记录的是主机数据库的写后的数据,批量操作性能较差,解决now()或者user()或者@@hostname等操作在主从机器上不一致的问题

3.在mysql主服务,配置slave账号,用于从服务同步数据

使用mysql -uroot -prootroot在mysql主服务登录,然后执行下方sql

# 1.创建账号
create user 'slave'@'%';
# 2.设置密码
alter user 'slave'@'%' identified with mysql_native_password by 'rootroot';
# 3.授予slave权限,第一个*是所有数据库,第二个*是所有数据表
grant replication slave on *.* to 'slave'@'%';
# 4.刷新数据库
flush privileges;

经过上述步骤之后,对slave账号授予了远程复制的权限,其他权限都不分配

image

# 查询master的状态,为从服务器配置做准备
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000005 |      157 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4.准备mysql从服务

docker run -d \
-p 3308:3306 \
-v /Users/guaguaerhao/docker/mysql-master-slave/slave1/conf:/etc/mysql/conf.d \
-v /Users/guaguaerhao/docker/mysql-master-slave/slave1/data:/var/lib/mysql \
-v /Users/guaguaerhao/docker/mysql-master-slave/slave1/log:/var/log/mysql \
-v /Users/guaguaerhao/docker/mysql-master-slave/slave1/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=rootroot \
--name atguigu-mysql-slave1 \
-d mysql:8.0.33 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci

5.准备从服务器的配置my.cnf

[mysqld]
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改id
server-id=2
# 中继日志名,默认xxxxx-relay-bin
#relay-log=relay-bin

6.在从服务器配置主从关系

# 在从服务器,mysql命令中执行以下sql
change master to master_host='192.168.31.34',master_user='slave',master_password='rootroot',master_port=3307,master_log_file='binlog.000002',master_log_pos=1051;

7.启动主从同步

#启动从服务器的复制功能,从服务器执行以下sql
start slave;
#查看状态
show slave status \G;

重复4 - 7步骤

4.准备mysql从服务

docker run -d \
-p 3309:3306 \
-v /Users/guaguaerhao/docker/mysql-master-slave/slave2/conf:/etc/mysql/conf.d \
-v /Users/guaguaerhao/docker/mysql-master-slave/slave2/data:/var/lib/mysql \
-v /Users/guaguaerhao/docker/mysql-master-slave/slave2/log:/var/log/mysql \
-v /Users/guaguaerhao/docker/mysql-master-slave/slave2/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=rootroot \
--name atguigu-mysql-slave2 \
-d mysql:8.0.33 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci

5.准备从服务器的配置my.cnf

[mysqld]
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改id
server-id=3
# 中继日志名,默认xxxxx-relay-bin
#relay-log=relay-bin

6.在从服务器配置主从关系

# 在从服务器,mysql命令中执行以下sql
change master to master_host='192.168.31.34',master_user='slave',master_password='rootroot',master_port=3307,master_log_file='binlog.000002',master_log_pos=1051;

7.启动主从同步

#启动从服务器的复制功能,从服务器执行以下sql
start slave;
#查看状态
show slave status \G;

8.结果

着重查看这两个属性:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.2.52
                  Master_User: slave
                  Master_Port: 3400
                Connect_Retry: 60
              Master_Log_File: binlog.000006
          Read_Master_Log_Pos: 157
               Relay_Log_File: 30126857f0b2-relay-bin.000003
                Relay_Log_Pos: 323
        Relay_Master_Log_File: binlog.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: 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: 157
              Relay_Log_Space: 720
              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: 1
                  Master_UUID: cb6a89ea-2322-11ee-a186-0242ac110002
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           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
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 0
            Network_Namespace: 
1 row in set, 1 warning (0.00 sec)

ERROR: 
No query specified

9.测试同步

在master创建数据库db_user,片刻,slave1,slave2也出现db_user(手动刷新)
image

posted @ 2023-07-17 00:00  呱呱二号  阅读(41)  评论(0编辑  收藏  举报