docker安装部署mysql5.7通用标准
docker安装部署mysql5.7通用标准
创建MySQL映射文件夹
mkdir -p /data/mysql/{config,data,logs,data_backup}
创建后文件夹结构如下:
/data
└── mysql
├── config
├── data
├── data_backup
└── logs
创建my.cnf配置文件:
cat > /data/mysql/config/my.cnf << EOF
[mysql]
default-character-set=utf8mb4
[mysqld]
port = 3306
max_connections=10000
interactive_timeout=600
wait_timeout=600
skip-name-resolve
sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
character-set-server=utf8mb4
lock_wait_timeout=1800
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=1024M
slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=5
#bin-log 配置开始
#server-id = 1
#log-bin=/var/log/mysql/mysql-bin
#log_warnings = 1
#binlog_format=MIXED
#expire-logs-days = 5
#max-binlog-size = 500M
#bin-log 配置结束
innodb_page_cleaners = 64
innodb_buffer_pool_size = 48912M
innodb_buffer_pool_instances = 64
innodb_write_io_threads=32
innodb_read_io_threads = 32
innodb_thread_concurrency = 32
myisam_use_mmap = ON
tmp_table_size = 128M
read_buffer_size = 1M
sort_buffer_size = 16M
join_buffer_size = 16M
query_cache_size = 25M
query_cache_limit = 8M
open-files-limit = 25600
EOF
docker MySQL启动命令:
docker run --name mysql \
--restart=always \
-v /data/mysql/config:/etc/mysql/conf.d \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/data_backup:/var/lib/mysql_backup \
-v /etc/localtime:/etc/localtime \
-v /data/mysql/logs:/var/log/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=redrcd@123 \
-d 9.8.8.11:8281/mysql:5.7.36 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
命令相关说明:
定义使用镜像拉取地址:9.8.8.11:8281/mysql:5.7.36
docker run --name mysql \ 定义容器名称为MySQL
--restart=always \ 定义容器开机自动启动
-v /data/mysql/config:/etc/mysql/conf.d \ 定义MySQL配置文件存储挂载目录/data/mysql/config
-v /data/mysql/data:/var/lib/mysql \ 定义MySQL数据存储挂载目录/data/mysql/data
-v /data/mysql/data_backup:/var/lib/mysql_backup \ 定义MySQL数据导出存储挂载目录/data/mysql/data_backup
-v /data/mysql/logs:/var/log/mysql \ 定义MySQL日志存储挂载目录/data/mysql/data_backup
-v /etc/localtime:/etc/localtime \ 定义时间使用系统时间
-p 3306:3306 \ 定义服务监听使用端口
-e MYSQL_ROOT_PASSWORD=redrcd@123 \ 定义MySQL数据库的root密码
-d 9.8.8.11:8281/mysql:5.7.36 \ 定义拉去的MySQL数据库版本
--character-set-server=utf8mb4 \ 定义MySQL数据库默认字符集utf8mb4
--collation-server=utf8mb4_unicode_ci 定义MySQL数据库默认排序规则 utf8mb4_unicode_ci
开启远程连接
解决办法:
1.进入mysql容器
docker exec -it mysql bash
2. 使用root账号登录MySQL
mysql -uroot -pxxxxxx
3.使用mysql数据库
use mysql;
查看当前用户
select host,user from user;
4. 修改User表,将root用户更改为可以远程连接
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
5.权限刷新重载;
flush privileges;
MySQL数据导入导出:
数据导入导出的目录:-v /data/mysql/data_backup:/var/lib/mysql_backup
-v /data/mysql/data_backup:/var/lib/mysql_backup
创建数据库转储(数据库导出)命令:
$ docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /data/mysql/data_backup/all-databases.sql
从转储文件恢复数据(数据库导入)命令:
$ docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /data/mysql/data_backup/all-databases.sql
官方参考文档:
https://hub.docker.com/_/mysql?tab=description&page=1&name=8
配置备份备份脚本设置:
拉取脚本并设置权限:
cd /data && wget http://10.10.38.20:88/shell/backup_peizhi_docker_data_mysql.sh && chmod +x backup_peizhi_docker_data_mysql.sh
设置定时任务:
crontab -e
00 02 * * 0 /data/backup_peizhi_docker_data_mysql.sh
运行脚本测试
/data/backup_peizhi_docker_data_mysql.sh
运行完成后data目录下会多了一个back_up的目录,具体目录结构如下:
/data
├── back_up 配置备份所在目录
│ └── 10.10.27.19 所在服务器IP
│ └── 2022-06-23 备份时间
│ └── mysql 备份服务名称(不备份log日志和data数据)
│ └── config 备份配置
└── mysql 服务映射配置文件目录位置
├── config 服务配置放在此目录
├── data 服务数据放在此目录
├── data_backup 服务数据备份导出存放在此目录
└── logs 服务运行日志放在此目录