- 使用系统:centos7.6
1.安装命令
1.1安装mysql8
mkdir -p /usr/local/mysql/conf.d
mkdir -p /usr/local/mysql/logs
mkdir -p /usr/local/mysql/data
# /etc/localtime:/etc/localtime:ro是将主机的时间与容器中的时间同步一致
# --lower-case-table-names=1关闭mysql8的大小写敏感
# 设置字符集为utf8mb4
docker run -p 3306:3306 --name mysql8 --restart always \
-v /usr/local/mysql/conf.d:/etc/mysql/conf.d \
-v /usr/local/mysql/logs:/var/log \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=<your password> -d mysql:8 --lower-case-table-names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
注:如果安装的时候需要设置大小写不敏感,请看下文中的bug2。
1.2安装mysql5.7
mkdir -p /usr/local/mysql5.7/conf
mkdir -p /usr/local/mysql5.7/logs
mkdir -p /usr/local/mysql5.7/data
chmod -R 777 /usr/local/mysql5.7
cd /usr/local/mysql5.7/conf
touch my.cnf
vi my.cnf
# 然后添加my.cnf的配置内容
- docker启动命令
docker run -it \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=<your password> \
-v /usr/local/mysql5.7/conf:/etc/mysql/conf.d \
-v /usr/local/mysql5.7/data:/var/lib/mysql \
-v /usr/local/mysql5.7/logs:/var/log/mysql \
-d --restart=always mysql:5.7
2.修改远程连接
docker exec -it mysql8 /bin/bash
mysql -u root -p
# 使用mysql数据库
use mysql;
# 设置远程访问
# mysql8之前版本的授权语句如下
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
# mysql8版本的授权语句
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
# 注:如果有需要的话,可以更新一下用户的密码策略(如果使用sqlyog,navicat低版本的话连接需要修改,最新版本的都支持了)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
#刷新权限
FLUSH PRIVILEGES;
# 查看大小写敏感设置
show variables like 'lower%';
# 要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器
3.修改MySQL配置文件
- 方式一:
在容器卷对应目录下,如上文映射的文件路径/usr/local/mysql/conf.d下,重新创建my.cnf文件,然后添加需要的配置;
配置完成后,重启mysql容器。
cd /usr/local/mysql/conf.d
# 创建my.cnf文件,输入所需要的配置
vi my.cnf
# 重启mysql容器
docker restart [容器名称]
- 方式二:该方式还可以用于因为修改配置文件导致容器无法启动的情况
# 使用
docker inspect [容器名称]
# 查看如下内容
"MergedDir": "/var/lib/docker/overlay2/021******4de82/merged"
# 在主机中,跳转至merged的上级目录,即使用如下命令
cd /var/lib/docker/overlay2/021******4de82/
ls
# 可见如下目录:diff link lower merged work
# 进入diff目录下的etc/mysql/conf.d下创建my.cnf然后添加配置文件;
# 或者进入merged目录下的etc/mysql/修改my.cnf文件或者在etc/mysql/conf.d下创建my.cnf然后添加配置文件
# 修改完成后重启mysql容器
docker restart [容器名称]
注:如果容器一致处于重启状态,请查看容器日志,根据报错,解决问题
查看日志,命令:docker logs [容器名称]
关于mysql8设置大小写问题,请参考下文中的bug2
3bug
bug1.firewalld关闭时使用docker run报错
使用阿里私人云主机firewalld关闭时,使用docker run运行mysql时会报错,解决方案,将firewalld打开好了,或者将docker重启。
bug2.Different lower_case_table_names settings for server (‘1’) and data dictionary (‘0’)
官方解释:ower_case_table_names can only be configured when initializing the server. Changing the lower_case_table_names setting after the server is initialized is prohibited.
也就是只有在安装完成之后,初始化数据库之前,修改my.cnf然后再初始化数据库才有效,如:--initialize --lower-case-table-names=1
具体修改见网友博文:
1.Linux下安装MySQL 8.0.12 报错 [ERROR] [MY-011087] [Server] Different lower_case_table_names
参考地址
1.使用Docker运行mysql8,并设置远程访问
2.使用docker安装mysql8.0最新版
3.Centos7 Docker安装mysql5.7