很久没有记录了,今天有时间就记录一下最近安装遇到的问题
liunx安装docker这个是前提,就不多过述
1 准备两台服务器
10.104.13.139
10.104.13.140
2 确保liunx安装的docker正常运行的
ps:最好提前关闭防火墙 或者提前开放对应端口 不然同步会失败的 关闭防火墙后记得重启docker 不然docker容器会启动失败的
1:查看防火状态 systemctl status firewalld service iptables status 2:暂时关闭防火墙 systemctl stop firewalld service iptables stop 3:永久关闭防火墙 systemctl disable firewalld chkconfig iptables off
// 重启命令 systemctl restart docker
3 后续就正式的开始安装了
docker run -d -p 4406:3306 \ --name mysql-4406 \ --privileged=true \ -v /app/mysql-4406/log:/var/log/mysql \ -v /app/mysql-4406/data:/var/lib/mysql \ -v /app/mysql-4406/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=root \ mysql:8.0.35 --lower_case_table_names=1 命令解释: -d: 后台运行容器,并返回容器ID -p 3311:3306 :将容器的3306端口映射到宿主机3310端口 -e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码 -v /home/mysql/node-2/config:/etc/mysql/ :将配置文件夹挂载到宿主机 –name mysql01(02):将容器命名为 mysql01(02) lower_case_table_names=1 不区分大小写
查看容器是否正常启动
docker ps
如果启动失败 需要查看容器的日志
docker ps -a
docker logs 容器id
后续就是在挂载的目录创建MySQL的配置文件了
cd /app/mysql-4406/conf vim my.cnf // 编辑插入配置 就不再过多解释 基本的配置 [mysqld] log-error=/var/log/mysqld.log server_id=101 binlog-ignore-db=mysql log-bin=mall-mysql-bin binlog_cache_size=1M binlog_format=mixed expire_logs_days=7 slave_skip_errors=1062
编辑保存后,需要重启容器使其配置文件生效
-- 重启镜像
docker ps
docker restart id
下一步就是进入到MySQL中创建同步的用户信息并赋予其权限
--进入镜像登陆MySQL docker exec -it id /bin/bash mysql -uroot -p --创建同步账号 CREATE USER 'slave'@'%' IDENTIFIED BY 'slave'; --给账号赋权限 GRANT ALL ON *.* TO 'slave'@'%' WITH GRANT OPTION; -- 刷新权限 FLUSH PRIVILEGES; --查看master日志信息 show master status;
完成后,master库的操作就完成了,后续就不要再动主库了,记住show master status;显示的值,slave同步用到
主要是用到 file和position的值
4 安装slave数据库 和master安装差不多
docker run -d -p 4407:3306 \ --name mysql-4407 \ --privileged=true \ -v /app/mysql-4407/log:/var/log/mysql \ -v /app/mysql-4407/data:/var/lib/mysql \ -v /app/mysql-4407/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=root \ mysql:8.0.35 --lower_case_table_names=1 // 查询容器是否启动 docker ps // 创建配置文件 cd /app/mysql-4407/conf vim my.cnf [mysqld] server_id=102 binlog-ignore-db=mysql log-bin=mall-mysql-slave1-bin binlog_cache_size=1M binlog_format=mixed expire_logs_days=7 slave_skip_errors=1062 relay_log=mall-mysql-relay-bin log_slave_updates=1 read_only=1
-- 重启镜像
docker restart id
--进入镜像登陆MySQL
ocker exec -it id /bin/bash mysql -uroot -p change master to master_host='10.104.13.139', master_user='slave', master_password='slave', master_port=4406, master_log_file='mall-mysql-bin.000001', master_log_pos=875, master_connect_retry=30, get_master_public_key=1; 解释: get_master_public_key 密码加密方式 CHANGE MASTER TO MASTER_HOST='主机的IP地址', MASTER_USER='slave'(刚刚配置的用户名), MASTER_PASSWORD='123456'(刚刚授权的密码), master_port=主机开放的端口 我这里是3310端口, MASTER_LOG_FILE='mysql-bin.具体数字' MASTER_LOG_POS=具体值(之前的Position); master_connect_retry=30, 在主服务器宕机或连接丢失的情况下,从服务器线程重新尝试连接主服务器之前睡眠的秒数。如果主服务器.info文件中的值可以读取则优先使用。如果未设置, 默认值为60 --启动同步 start slave; --查看同步状态 show slave status \G; Slave_IO_Running: Yes Slave_SQL_Running: Yes --都为yes 就是成功了
--如果失败了 Slave_IO_Running: NO 重复擦操作下面的步骤
stop slave; reset slave all; change master to master_host='10.104.13.139', master_user='slave', master_password='slave', master_port=4406, master_log_file='mall-mysql-bin.000001', master_log_pos=875, master_connect_retry=30, get_master_public_key=1; -- 需要检查 slave 的权限 或者 master_log_file master_log_pos 信息是否对上 start slave; show slave status \G;
到这里主从复制就完成了,后续就是验证了,这里就不多说了
#登录master库
#创建数据库testdb,使用默认字符集
create database test11;
#在slave中查看是否有test11库
show database;
打完收工,欢迎交流。2024-05-25 14:53:25