mysql
主从复制搭建
在主服务上将用到的image输出到文件
$ docker save -o mariadb.tar mariadb:latest
$ docker save -o PHPmyadmin.tar PHPmyadmin:latest
在从服务器的docker中导入到本地
1.将文件导入容器
docker load -i mariadb.tar
docker load -i phpmyadmin.tar
安装docker容器
1 . 从主服务器 上拷贝 mariadb.tar
与PHPmyadmin.tar
两imge
scp -r root@ip:/tmp/mariadb.tar /tmp/
scp -r root@ip:/tmp/PHPmyadmin.tar /tmp/
配置docker-compose.yml
version: '3'
services:
mysql:
image: mariadb:10.4.8
restart: always
container_name: slave
extra_hosts:
- 域名:IP
ports:
- 3306:3306
volumes:
- ./mysql:/etc/mysql
- ./mysql-data:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD=password
- TZ=Asia/Shanghai
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: slave
volumes:
- /etc/localtime:/etc/localtime:ro
ports:
- 80:80
environment:
- PMA_ARBITRARY=1
到主服务上备份全量数据库
mysqldump -uroot -ppassword 数据库名 > 数据库名.sql
拷贝文件
将备份文件从容器考入宿主机
docker
cp
容器名:容器内路径 /备份数据库名.sql 宿主机路径
将备份文件宿从主机考入指定容器
docker
cp
宿主机路径/备份数据库名 指定容器名:容器内路径
配置主库my.cnf
[mysqld]
server-id = 1 设定主机
server-idlog_bin= /var/log/mysql/mysql-bin.
logbinlog_format= mixed # 日志格式
binlog_expire_logs_seconds = 604800 # 日志过期的时间秒数
max_binlog_size = 200M # 最大二进制日志文件
binlog_do_db = 数据库名 数据库
新建主服务数据库
mysql -uroot -ppassword
ceeate database 数据库名;
导入备份文件
mysql -uroot -p123456 数据库名< /tmp/数据库名.sql
新建slave用户并赋权
登录mysql
mysql -uroot -ppassword
分配账号
CREATE USER 'test-slave'@'%' IDENTIFIED BY '123456';
``GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘test-slave’@’%’;刷新权限
flush privileges;`
查看bin-log
、porsition
值
在mysql
中执行
show master status;
查询出的两个参数,我们配置从服务器上的mysql
需要用到
至此,主服务器上的mysql
配置完毕
拷贝文件到从宿主机
将备份文件从主宿主机考入从宿主机
docker cp
住宿主机路径 /备份数据库名 从宿主机路径
将备份文件从宿主机考入容器内
docker cp
宿主机路径/备份数据库名 容器名:容器内路径
在从服务器建立数据库
mysql -uroot -ppassword
create database 数据库名 ;
配置my.cnf
[mysqld]
server-id=2( 这个和主服务器的id要不同)1
导入备份文件
mysql -uroot -ppassword 数据库名< /容器内路径/备份数据库名.sql
停止slave
stop slave
创建复制请求
change master to master_host='主服务器地址',
master_user='test-slave', master_password='123456',
master_log_file='mysql-bin.000005',
master_log_pos=1662,``port:3306;
启动slave
start slave
在从服务数据库查看是否设置成功,
show slave status\G;
显示
Slave_IO_STATE:Waiting for master to send event
Master_host:主服务器地址
Master_user:test-slave
Master_port:3306
connnect_retry:60
Master_log_file:mysql-bin.000005
Read_Master_log_pos:1662
Relay_log_file:AE6Z*****-relay-bin.000002
Relay_log_pos:1415
Slave_IO_Running:yes
Slave_SQL_Running:yes
其中Slave_IO_Running:yes Slave_
与SQL_Running:yes
都显示yes既成功