mysql的主从配置(docker-conetos7)

安装docker

也可以参照菜鸟的教程。

yum install docker -y

启动docker并设置开启开机启动

systemctl start docker
systemctl enable docker

查看mysql的容器 并选择下载

docker search mysql
//下载
docker pull mysql:5.7

一般说明,到这里可能你有疑问,我安装了mysql容器,可以在里面把配置文件修改了就不好了吗?这样当然可以。但是考虑到容器原本就封装好了环境,进到容器里面修改可能需要安装很多插件等,不仅要等很久才能下载完还可能对环境进行了污染。所以一般考虑与宿主机的配置文件的方式。

在宿主机上创建目录结构

mkdir -p /usr/local/docker/mysql/conf
mkdir -p /usr/local/docker/mysql/data

运行容器

docker run --name mysql -p 3306:3306 -v /usr/local/docker/mysql/data:/var/lib/mysql -v /usr/local/docker/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

参数说明一下

  • -i:表示运行容器
  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
  • --name :为创建的容器命名。
  • -v:表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
  • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
  • -e: 设置环境变量,这里是指定root账号密码

设置环境变量,更多设置请参考 my.cnf

--server-id=1 服务器id

--log-bin=mysql-bin 日志文件前缀

#--replicate-do-db 可以指定同步哪个数据库,多个用逗号分隔

如--replicate-do-db=mydb1,mydb2

 

拷贝默认配置文件进行修改

容器内路径 /etc/mysql/mysql.conf.d/mysqld.cnf

docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config

修改本地上配置文件

 本地路径 /usr/local/docker/mysql/config/mysqld.cnf

在[mysqld] 节点添加
character-set-server=utf8
#服务器id 同一局域网不要重复, 可以用ip后一位
server-id=1
#二进制日志开启, 指定文件前缀
log-bin=mysql-bin
#需要同步的数据库
replicate-do-db=mydb1,mydb2
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

 

编辑配置文件 vim  /usr/local/docker/mysql/config/mysqld.cnf

修改完按esc 输入 : 接着wq! 保存退出。

重启容器

docker restart mysql

设置容器开机自动启动(也可以在创建容器时 设置环境变量(--restart=always)

docker update --restart=always mysql

 配置完配置文件,实际开发种不可能使用root用户操作数据库。所有需要添加新的用户和授权。

创建用户和授权

 

#进入容器:
docker exec -it mysql bash
#进入mysql:
mysql -uroot -p
#授权root用户可以远程访问
mysql> GRANT ALL ON *.* TO 'root'@'%';
#下面是创建两个用户user1,user2并且赋予权限,这里根据你的需要创建用户和授权
CREATE USER 'user1'@'localhost' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO ' user1'@'ip地址' WITH GRANT OPTION;
CREATE USER ' user2'@'%' IDENTIFIED BY '密码2';
GRANT ALL PRIVILEGES ON *.* TO ' user2'@'%' WITH GRANT OPTION;
#创建连接账号(指定从库ip) 多个可以创建多个
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '你想给那个用户连'@'从库ip';
#如果你想省事就直接授权给root用户
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'从库ip';

 

刷新权限

mysql> flush privileges;

更新root用户密码(如果你不想修改密码省略)

mysql> UPDATE user SET authentication_string=password('新密码') WHERE user='root';

刷新权限

mysql> flush privileges;

主从配置

到上面的步骤主数据库完成了配置,但是从库需要一些参数来连接到主库来达到主从的配置

#查看marster 状态 记住File,Position  从库连接必要参数

#查看marster 状态 记住File,Position  从库连接必要参数
show master status;

 

 

 这两个参数,等下从库连的时候要用,这时候不用动主库了,修改主库的时候这两个参数会变动。

配置从库

 配置文件

在[mysqld] 节点添加
character-set-server=utf8
#服务器id 同一局域网不要重复, 可以用ip后一位
server-id=2

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

 

 设置好了,重启从库容器mysql

docker restart mysql

 

 设置容器开机自动启动(也可以在创建容器时 设置环境变量(--restart=always)

docker update --restart=always mysql

 

设置好了,就在从表的客户端或者进入从表的mysql容器执行

#停止同步
stop slave;
#更改同步参数 master_log_file  ,  master_log_pos  在主库获取执行下面的命令
change master to master_host=’ 主库ip’,master_user=’用户’,master_password=’密码’,master_log_file=’mysql-bin.000004’,master_log_pos=770
执行完成功后开始同步
start slave;
#刷新同步(马上生效)

flush privileges;

 

 

#在从库查看同步状态

show slave status;

 

 

如果 Slave_IO_Running , Slave_SQL_Running   都是Yes 表示同步成功

到这里就完结了。测试一下创建mydb1库,创建一张表加数据看看吧。

总结:

配置主从数据库步骤:

安装两个mysql(容器),修改配置文件,在配置文件种设置不同的server-id,主库开启二进制日志功能,这个是给从库可以随便读取日志从而刷新从库的(关键)。

重启mysql让配置生效,这里是从前容器 docker restart mysql;

配置用户和授权 ,并刷新

CREATE USER '用户'@'ip/不限ip使用%代替' IDENTIFIED BY '密码';

GRANT ALL PRIVILEGES ON *.* TO '用户'@'ip地址[%]' WITH GRANT OPTION

flush privileges;

在从库中操作,更改同步参数 master_log_file  ,  master_log_pos  在主库获取执行命令

change master to master_host=’ 主库ip’,master_user=’用户’,master_password=’root’,master_log_file=’上面查到的参数’,master_log_pos=查到的参数

犯错总结

在docker创建mysql容器创建了几个没有杀掉其它导致配置文件不生效和一些莫名的错;使用docker ps -a 查看所有的docker容器,使用docker rm -f 名称删除不需要的容器。

在修改mysql的配置文件的时候使用的使用的是容器的/etc/mysql/mysql.conf.d/mysqld.cnf配置文件,以前是不是你修改的是my.ini?这里是不是有疑问呢?

 

 

 

 

 

 

 

 

posted on 2020-12-17 11:48  fyccaishao  阅读(135)  评论(0编辑  收藏  举报

导航