docker启动镜像挂载本地配置

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

 

docker 挂载redis

1、以docker启动redis挂载配置文件以及备份数据文件为例

 (60条消息) docker部署redis,并实现本地redis.conf配置加载_世外平常人的博客-CSDN博客_docker redis redis.conf

docker挂载mysql 开启容器卷

1、下载镜像文件

docker pull mysql:5.7

2、创建实例并启动

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:跳过域名解析

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

docker exec -it mysql mysql -uroot -proot

4、设置 root 远程访问

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

5、进入容器文件系统

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的数据恢复

 

posted @ 2022-05-03 19:56  漫步花海下的oldman  阅读(1519)  评论(0编辑  收藏  举报