Linux如何在docker容器下配置mysql主从数据库
Posted 认真的咸鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 表示配置已经成功
效果 :
以上是关于Linux如何在docker容器下配置mysql主从数据库的主要内容,如果未能解决你的问题,请参考以下文章