docker下安装mysql,并实现主从复制
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_name
和table_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