Linux如何在docker容器下配置mysql主从数据库

第一步,在Linux下docker下安装mysql
我这里用两台服务器一台做主 一台做从(两个服务器安装mysql一样,重复一下操作即可)
一、在docker上拉取mysql(默认安装最新版本)

docker pull mysql

二、启动mysql容器

docker run -it --rm --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql

我是在主从数据库分别创建了两个数据库
在这里插入图片描述

第二步,在主数据库配置相关主从配置
一.通过容器进入mysql配置文件进行编辑。
在这里插入图片描述

[root@VM-4-5-centos ~]# docker exec -it  mysql-1.0.0 /bin/bash 
root@e35b5eebe9d4:/# cd /etc/mysql 
root@e35b5eebe9d4:/etc/mysql# ls           
conf.d	my.cnf	my.cnf.fallback
root@e35b5eebe9d4:/etc/mysql# vi my.cnf

(注:容器下可能不识别 vim命令 可用 以下两个命令依次安装)

root@e35b5eebe9d4:/etc/mysql# apt-get update
root@e35b5eebe9d4:/etc/mysql# apt-get install vim

二.进入my.cnf 修改配置

!includedir /etc/mysql/conf.d/
#server-id给数据库服务的唯一标识
server-id=1
##
###log-bin设置此参数表示启用binlog功能,并指定路径名称
log-bin=/var/lib/mysql/mysql-bin
sync_binlog=0
###设置日志的过期天数
expire_logs_days=7
binlog-do-db=cool
binlog-do-db=cool2
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema

(注:将上面的代发添加到配置文件,注意 service-id 主从数据库都需唯一 binlog-do-db 配置需要主从的数据库,binlog-ignore-db 表示需要忽略掉的数据库)
然后重启mysql
第三步.主库赋予从库权限账号,允许用户在主库上读取日志,赋予Slave机器有File权限和REPLICATION SLAVE的权限。
进入mysql控制台

mysql> create user 'root'@'1.117.183.xxx' identified by '密码';
mysql> grant FILE on *.* to 'root'@'1.117.183.xxx';
mysql> grant replication slave  on *.* to 'root'@'1.117.183.xxx';
mysql> flush privileges;

注: 这里还有两个坑 一个是需要注意下最新的mysql 需要先创建用户再授权 否则mysql命令会报错,
另一个需要修改从库用户(新创建的用户)的密码解码方式否则在从库数据库会连不上主数据库,

SELECT plugin FROM `user` where user = 'root';
ALTER USER 'root'@'1.117.183.xxx' IDENTIFIED WITH mysql_native_password BY 'root';

然后重启mysql,登录mysql,查看主库信息
在这里插入图片描述
注:File 和Positon 需要记录下 配置从库数据库需要用到
第四步.配置从库(进入配置文件的步骤一样)
一.修改配置文件

log-bin=mysql-bin
server-id=3
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
replicate-do-db=cool
replicate-do-db=cool2
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=607

二.进入mysql控制台,配置主库节点信息。

mysql> stop slave;
mysql> change master to master_host='1.116.157.xxx',master_port=3307,master_user='root',master_password='密码',master_log_file='mysql-bin.000003', master_log_pos=156;
mysql> start slave;

注意:上面的master_log_file是在Master中show master status显示的File,
而master_log_pos是在Master中show master status显示的Position。

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 1.116.157.xxx
                  Master_User: root
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 719
               Relay_Log_File: 1122eacb5941-relay-bin.000005
                Relay_Log_Pos: 934
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: cool,cool2
          Replicate_Ignore_DB: mysql
           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: 719
              Relay_Log_Space: 1571
              Until_Condition: None

注:这两个Slave_IO_Running,Slave_SQL_Running都是yes 表示配置已经成功
效果 :
在这里插入图片描述
在这里插入图片描述

Guess you like

Origin blog.csdn.net/mzm4399/article/details/122208415