通过Docker安装配置Mysql主从节点

通过Docker安装配置Mysql主从节点

  • 以下docker相关的命令,需要在root用户环境下或通过sudo提升权限来进行操作。

1.拉取Mysql5.7.15镜像到本地

docker pull mysql:5.7.15

# 如果只需要跑一个mysql实例,不做主从,那么执行以下命令即可,不用再做后面的参考步骤:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/test/mysql/data:/var/lib/mysql mysql:5.7.15

# 然后用Shell或客户端软件通过配置(用户名: root 密码: 123456 IP:你的本机IP 端口:3306)来登陆

2. 准备MYSQL配置文件

  • mysql5.7.15安装后的默认配置文件在/etc/mysql/my.cnf

  • 自定义的配置文件一般在/etc/mysql/conf.d路径下

  • 创建/test/mysql/master/conf/my.cnf和/test/mysql/slave/conf/my.cnf 文件

  • 用于配置主从:
    ~/test/mysql/master/conf/my.cnf

[mysqld]
server_id = 1
log-bin= mysql-bin
read-only=0

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

~/test/mysql/slave/conf/my.cnf

[mysqld]
server_id = 2
log-bin= mysql-bin
read-only=1

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

3.Docker分别运行Mysql 主/从两个容器

  • 将mysql主节点运行起来
mkdir -p ~/test/mysql/master/data
docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/test/mysql/master/data:/var/lib/mysql -v ~/test/mysql/master/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7.15
  • 运行参数说明
docker run -d 
--name mysql-master // 容器的名称设为mysql-master
-p 3307:3306 // 将host的3307端口映射到容器的3306端口
-v ~/test/mysql/master/conf/my.cnf:/etc/mysql/my.cnf //配置文件挂载
-v ~/test/mysql/master/data:/var/lib/mysql // mysql容器内数据挂载到host的/data/mysql/data_master,用于持久化
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.15  // mysql的root登陆密码为123456
  • 将mysql从节点运行起来
mkdir -p ~/test/mysql/slave/data
docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/test/mysql/slave/data:/var/lib/mysql -v ~/test/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7.15

4.登陆MYSQL主节点配置同步信息

  • 登陆mysql
# 方式一:192.168.1.xx 是你本机的内网ip
mysql -u root -h 192.168.1.xx -P3307 -p123456

# 方式二:进入docker设置:
docker exec -it mysql-master bash
mysql -u root -p123456
  • 在mysql client中执行
mysql > grant replication slave on *.* to 'slave'@'%' identified by '123456';
mysql > flush privileges;
  • 获取status
mysql> show master statusG;
*************************** 1. row ***************************
             File: mysql-bin.000003
         Position: 582
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

5.登陆MYSQL从节点配置同步信息

  • 登陆mysql
# 192.168.1.xx 是你本机的内网ip
mysql -u root -h 192.168.1.xx -P3308 -p123456
  • 在mysql client中执行
mysql > change master to master_host='192.168.1.xx',master_port=3307,master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=0;

mysql > start slave;
  • 获取status,得到类似如下的输出:
mysql> show slave statusG;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.xx
                  Master_User: slave
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 582
               Relay_Log_File: 4254044df25b-relay-bin.000002
                Relay_Log_Pos: 795
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...
  • 可以尝试在主mysql中新建数据库里建表操作下,然后在从节点上检查数据是否已经同步过来。