数据库
首页 > 数据库> > 阿里云 podman docker MySQL8 主从复制

阿里云 podman docker MySQL8 主从复制

作者:互联网

podman pull mysql 

mkdir -p /home/mysql/mysql-master/{data,log,conf}

!!!删除当前目录下一切!!!慎用
rm -rf ./*

在conf目录下,新增my.cnf,这个是mysql本来就有的初始文件。之所以在宿主机也加,
是因为创建容器的时候,如果目录映射为空,容器内会报错找不到my.cnf而起不来
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

# Custom config should go here
!includedir /etc/mysql/conf.d/

 podman run \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=Sailorj5%5 \
    -v /home/mysql/mysql-master/data:/var/lib/mysql:rw \
    -v /home/mysql/mysql-master/log:/var/log/mysql:rw \
	-v /home/mysql/mysql-master/conf/:/etc/mysql/conf.d:rw \
    -v /home/mysql/mysql-master/my.cnf:/etc/mysql/my.cnf:rw \
    -v /etc/localtime:/etc/localtime:ro \
    --name mysql-master\
    -d mysql


podman logs -f --tail=100 mysql-master 
podman exec -ti mysql-master /bin/bash

登录mysql
mysql -u root -p
或者 mysql -h localhost -u root -p
mysql> select version();
MySQL版本号:8.0.15
使用mysql数据库
mysql> USE mysql;
修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'Sailorj5%5';
Query OK, 0 rows affected (0.01 sec)
刷新
mysql> flush privileges;
验证是否修改成功
mysql -u root -p
输入新密码
mysql> USE mysql;
用Navicat连接数据库,开启root用户远程访问权限:
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
刷新
mysql> flush privileges;

创建从数据库
mkdir -p /home/mysql/mysql-slave/{data,log,conf}
podman run \
    -p 3307:3306 \
    -e MYSQL_ROOT_PASSWORD=Sailorj5%5 \
    -v /home/mysql/mysql-slave/data:/var/lib/mysql:rw \
    -v /home/mysql/mysql-slave/log:/var/log/mysql:rw \
	-v /home/mysql/mysql-slave/conf/:/etc/mysql/conf.d:rw \
    -v /home/mysql/mysql-slave/my.cnf:/etc/mysql/my.cnf:rw \
    -v /etc/localtime:/etc/localtime:ro \
    --name mysql-slave\
    -d mysql
podman exec -ti mysql-slave /bin/bash

主从初始化启动成功,分别在外网3306接口、3307接口访问。

一、主库配置
USE mysql;
CREATE USER 'copyuser'@'%' IDENTIFIED BY 'Sailorj5%5';
Grant replication slave on *.* to 'copyuser'@'%';
flush privileges;
建完后检查是否能远程登录


#主要server-id=1001和log-bin=mysql-bin,一定要配置,其它的可以没有

[mysqld]
#主节点ID,确保唯一
server-id=1001

#开启mysql的binlog日志功能
log-bin=mysql-bin
#控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
sync_binlog=1
#binlog日志格式
binlog_format=MIXED
#binlog过期清理时间
expire_logs_days=7
#binlog每个日志文件大小
max_binlog_size=100m
#binlog缓存大小
binlog_cache_size=4m
#最大binlog缓存大小
max_binlog_cache_size=512m

#不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制黏贴下述配置项,写多行
#binlog-ignore-db=mysql

# 表中自增字段每次的偏移量
auto-increment-offset=1
# 表中自增字段每次的自增量
auto-increment-increment=1
#跳过从库错误
slave-skip-errors=all
#指定同步数据库,多个库设置多行
#binlog-do-db=sys_user

重启主库
pm restart mysql-master

查看数据库是否启用二进制日志
Show variables like 'log_bin'

查看主机状态
show master status;

查看从机状态:
show slave status\G;

查看ip
hostname -I


二、从库配置

配置从数据库配置文件
[mysqld]
server-id=1002
relay-log                    = /var/lib/mysql/mysql-relay
binlog_format=MIXED
#开启mysql的binlog日志功能
log-bin=mysql-bin
##表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
##slave设置为只读 #限定普通用户只读
read_only=1
#限定root只读
super_read_only=on
#指定同步数据库,多个库设置多行
#replicate-do-db=rtmart_auth   

1. reset slave;
Stop slave;
主从复制的最关键语句:
2. Change master to
         Master_host='47.116.142.35',	//主机的IP地址
         Master_user='copyuser',
         Master_password='Sailorj5%5',
         Master_log_file='mysql-bin.000001',
         Master_log_pos=156;
3. Start slave;

show slave status;

标签:binlog,slave,log,MySQL8,podman,master,mysql,home,docker
来源: https://www.cnblogs.com/bigsheng15/p/16553446.html