centos 下docker启动镜像挂载MySQL本地配置

前序

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个–privileged=true参数即可

如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即
使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

docker 挂载redis

1、以docker启动redis挂载配置文件以及备份数据文件为例
docker安装和docker部署redis,mysql等等

docker挂载mysql 开启容器卷

下载镜像文件

docker pull mysql:5.7

创建实例并启动

docker run -p 3306:3306 --name mysql  \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

参数说明

-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码 MySQL 配置

修改配置文件

 vi /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SETcollation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

注意:解决 MySQL 连接慢的问题 在配置文件中加入如下,并重启 mysql [mysqld] skip-name-resolve
解释: skip-name-resolve:跳过域名解析

通过容器的 mysql 命令行工具连接

docker exec -it mysql mysql -uroot -proot

设置 root 远程访问

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; flush privileges;

进入容器文件系统

docker exec -it mysql /bin/bas

开启bin log

修改配置文件

[mysqld]
log-bin=/var/lib/mysql/mysql-bin  
server-id=1
binlog_format=MIXED
expire_logs_days=30  
##binlog日志有三种格式:Statement、Row以及Mixed。 mysql默认采用statement,
##这里使用mixed
##expire_logs_days是日志过期时间,这里配置为30天,默认是0,0是永久的意思 

重启容器docker restart mysql,即可开启binlog。

可使用相关命令查询binlog:

##查看binlog日志是否开启
show variables like '%log_bin%';
##查看binlog日志路径
show variables like '%datadir%';
##刷新日志,会新建一个binlog日志文件
flush logs
##查看日志详情内容
show binlog events in 'mysql-bin.000002'; 
##查看日志过期时间  0为永久
show variables like 'expire_logs_days';

通过binlog日志恢复数据

mysql自带mysqlbinlog工具。进入docker容器直接运行指令:

mysqlbinlog  --start-datetime='2021-01-20 05:02:02' --stop-datetime='2021-01-20 09:02:02' /var/lib/mysql/mysql-bin.000001 | mysql -u root -p 

即可恢复数据。其中参数解释如下:

--start-datetime='2021-01-20 05:02:02'  开始时间
--stop-datetime='2021-01-20 09:02:02'   结束时间
/var/lib/mysql/mysql-bin.000001         binlog日志文件,如有多个文件,可按顺序              写下,以空格隔开
| mysql -u root -p                      表示以root账号执行mysql的数据恢复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值