1 mysql的安装与启动

1.1 拉取mysql5.7的镜像
docker pull mysql:5.7

1.2 运行

  docker run: 运行Docker容器的命令。


  --restart=always: 指定容器在退出时总是重新启动。这意味着,无论容器是正常退出还是异常退出,Docker将自动重新启动这个容器。


  --privileged=true: 赋予容器特权,允许它在主机上执行一些敏感操作,这通常是出于一些特殊需求的考虑,但需要注意潜在的安全风险。


  -p 13306:3306: 将主机的端口13306映射到容器的端口3306,这样外部系统可以通过主机的3306端口访问MySQL服务。


  --name mysql: 为容器指定一个名称,这里是"mysql"。


  -v /opt/mysql/mysql-master/logs:/logs: 将主机上的/opt/mysql/mysql-master/logs目录映射到容器内的/logs目录,用于存储MySQL的日志文件。


  -v /opt/mysql/mysql-master/data:/var/lib/mysql: 将主机上的/opt/mysql/mysql-master/data目录映射到容器内的/var/lib/mysql目录,用于存储MySQL的数据文件。


  -v /opt/mysql/mysql-master/conf:/etc/mysql: 将主机上的/opt/mysql/mysql-master/conf目录映射到容器内的/etc/mysql目录,用于存储MySQL的配置文件。


  -v /opt/mysql/mysql-master/my.cnf:/etc/mysql/my.cnf: 将主机上的/opt/mysql/mysql-master/my.cnf文件映射到容器内的/etc/mysql/my.cnf文件,这是MySQL的配置文件。


  -e MYSQL_ROOT_PASSWORD=mysql: 设置MySQL的root用户密码为"mysql",如果不设置,会在日志中生成一个默认root密码,通过docker logs mysql-container查看。


  -d mysql: 以后台(detached)模式运行MySQL容器。

 

  #如下

  docker run

  --name mysql-master

  -p 13306:3306

  -v /opt/mysql/mysql-master/logs:/logs

  -v /opt/mysql/mysql-master/data:/var/lib/mysql

  -v /opt/mysql/mysql-master/conf:/etc/mysql/conf.d

  -e MYSQL_ROOT_PASSWORD=mysql

  -d

  mysql:5.7

 

  1.3 主机上记得把13306端口放开,或者关闭防火墙

 firewall-cmd --zone=public --add-port=13306/tcp --permanent

 firewall-cmd --reload

 

至此可以通过数据连接工具进行连接了,启动完成

1.5 小记
进入mysql容器,如果出现 #bash-4.2
在容器中执行:
cp /etc/skel/.bash* /root/

  2 搭建mysql集群

2.1 修改主节点的onf.d文件内容

  vim /opt/mysql/mysql-slave1/my.cnf

  #加入如下配置

  server-id=1    #设置服务id,需全局唯一

  log-bin=/var/lib/mysql/mysql-bin  #开启binlog日志,供从库读取

  #binlog-do-db =test
  binlog-ignore-db=mysql
  binlog-ignore-db=sys
  binlog-ignore-db=performance_scheme
  binlog-ignore-db=information_scheme
  binlog_format=row

  #重启主节点

  docker restart mysql-master

  

 2.2 master节点创建一个用户

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master   #查看主节点在容器中的ip

docker exec -it mysql-master bash #进入容器
mysql -uroot -p123 #登录mysql
#创建用户方式一
grant replication slave on *.* to 'slave1'@'172.17.0.2' identified by '账号密码' #创建一个名为slave1的用户并给其复制权限,可以mysql数据库中user表中查看,此为mysql5.7版本语句
#创建用户方式二
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';这里的username是您要创建的用户名,hostname指定从哪些主机该用户可以连接到服务器,password是该用户的密码。您可以使用%作为通配符来允许从任何主机连接
GRANT ALL PRIVILEGES ON database_name.table_name TO 'username'@'hostname';这里的database_nametable_name指定了用户被授权的数据库和表。ALL PRIVILEGES表示授予用户所有权限。您也可以根据需要授予特定权限,如SELECT, INSERT, UPDATE, DELETE等。
FLUSH PRIVILEGES; 刷新权限。

#查看master的position,这是个会变化的值,后面从机连接主机时会用到。
show master status;
2.3 docker上再创建一个mysql容器mysql-slave1

  docker run

  --name mysql-slave1

  -p 13307:3306

  -v /opt/mysql/mysql-slave1/logs:/logs

  -v /opt/mysql/mysql-slave1/data:/var/lib/mysql

  -v /opt/mysql/mysql-slave1/conf:/etc/mysql/conf.d

  -e MYSQL_ROOT_PASSWORD=mysql

  -d

  mysql:5.7

  同样要记得关闭防火墙或开放端口出去

2.4 配置从库
vim otp/mysql/mysql-slave1/conf/my.cnf
 #加入服务id配置
[mysqld]
 server-id=2 #要全局唯一
docker restart mysql-slave #重启从库

docker exec -it mysql-slave baash #进入从库
mysql -uroot -p123 #登录mysql

? change master to #此条命令可以查看配置列表模板,辅助配置

#配置主库连接
#将mysql设置为从库
 CHANGE MASTER TO MASTER_HOST = '172.17.0.2', MASTER_USER = 'slave1', MASTER_PASSWORD = 'mysql', MASTER_PORT = 3306, MASTER_RETRY_COUNT = 0, MASTER_HEARTBEAT_PERIOD = 10000;
 #开启slave同步
start slave;

   #查看是否配置成功

  show slave status\G;

 Slave_IO_Running、Slave_SQL_Running这两处显示两个yes,则说明主从复制建立成功,也可以在主库写入数据,在从库进行查询,如果能查到主库写入的信息,则也能说明主从关系建立成功。

 至此,mysql的主从复制搭建完成,如果需要增加从节点继续创建slave即可,注意server-id不可重复。

  #若想停止从库同步

  stop slave

 

搭建过程中出现报错可参考:https://blog.51cto.com/u_15956038/6040698