描述
本文档记录了mysql安装过程,主从配置过程,主备实现方式。
安装mysql
- 创建mysql工作目录,用于挂载数据 配置文件等
#mkdir /root/mysql/data
#mkdir /root/mysql/conf.d
#mkdir /root/mysql/conf
- 启动一个未挂载的mysql容器
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
- 进入容器复制需要挂载的目录
# docker cp 4e71be6b176c:/var/lib/mysql /root/mysql/data
# docker cp 4e71be6b176c:/etc/mysql/my.cnf /root/mysql/conf/my.cnf
# docker cp 4e71be6b176c:/etc/mysql/conf.d /root/mysql/conf.d
#================配置文件复制,数据挂载========================
# 开启一个未挂载的容器 docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
# 将容器内的数据以及配置文件拷贝出来
# docker exec -it mysql /bin/bash
# docker cp 4e71be6b176c:/var/lib/mysql /root/mysql/data
# docker cp 4e71be6b176c:/etc/mysql/my.cnf /root/mysql/conf/my.cnf
# docker cp 4e71be6b176c:/etc/mysql/conf.d /root/mysql/conf.d
- 启动mysql 其脚本如下
#================配置文件复制,数据挂载========================
# 开启一个未挂载的容器 docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
# 将容器内的数据以及配置文件拷贝出来
# docker exec -it mysql /bin/bash
# docker cp 4e71be6b176c:/var/lib/mysql /root/mysql/data
# docker cp 4e71be6b176c:/etc/mysql/my.cnf /root/mysql/conf/my.cnf
# docker cp 4e71be6b176c:/etc/mysql/conf.d /root/mysql/conf.d
docker stop mysql \
docker rm mysql \
docker run -d \
--restart=always \
--privileged=true \
-v /root/mysql/data/:/var/lib/mysql \
-v /root/mysql/conf.d:/etc/mysql/conf.d \
-v /root/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /root/mysql/log:/var/log/mysql \
-p 3306:3306 \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
配置远程连接
mysql>alter user 'root'@'%' identified by '123456' password expire never;
mysql>alter user 'root'@'%' identified with mysql_native_password by '123456';
mysql>flush privileges;
主从配置
- 进入容器master机器上创建主从连接账户
mysql>CREATE USER 'slaves'@ '%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
mysql>flush privileges;
查看账户权限
mysql>show grants for root;
mysql>show grants for slaves;
- master配置my.cnf文件
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
server-id=201 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复
innodb_flush_log_at_trx_commit=2 # 写入磁盘策略
sync_binlog=1 #开启binlog日志同步功能
expire_logs_days=180 #二进制日志保留天数
log-bin=mysql-bin-1 #binlog日志文件名(可以任意命名)
#binlog-do-db=test # 这个表示只同步某个库 (如果没有此项,表示同步所有的库)
#binlog-ignore-db=xxxx # 二进制日志中忽略数据库
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
- slave从机器配置my.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
read-only=1 #是否只读,0 代表非只读 1:代表只读
server-id=202 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复
innodb_flush_log_at_trx_commit=2 #
sync_binlog=1 #开启binlog日志同步功能
expire_logs_days=180, # 二进制日志保留天数
log-bin=mysql-bin-1 #binlog日志文件名(可以任意命名)
# binlog-do-db=test # 这个表示只同步某个库 (如果没有此项,表示同步所有的库)
#binlog-ignore-db=xxxx # 还有一个参数是指定不同步哪些库,这里不再赘述
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
- 重启master slave 数据库
进入master 数据库容器,查看主数据库状态,可以获得数据库的binlog日志文件名称和位置,用于配置从数据库开始同步的文件和位置
mysql>show master status
进入slave数据库容器
change master to master_host='192.168.43.201',master_user='slaves ',master_password='123456!',get_master_public_key=1,master_log_file='mysql-bin-1.000002 ',master_log_pos= 650,master_port=3306;
参数说明
master_host:主数据库IP地址
master_user:主数据库连接用户名
master_password:主数据量连接密码
master_port:主数据端口
master_log_file:开始同步的主数据库日志名称,主数据库执行show master status 可获得当前binlog文件名称和位置
master_log_pos:开始同步的主数据库日志开始位置,主数据库执行show master status 可获得当前binlog文件名称和位置
get_master_public_key=1,mysql8默认使用插件caching_sha2_password连接需要拿到server的public key来加密password
- slave查看状态
开启或关闭主从同步
mysql>start slave;
查看主从同步
mysql>show slave status\G;
只有slave都为yes时配置才成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
测试主从同步
navicat 连接master数据库