默认不建立目录映射
# docker 中下载 mysql
docker pull mysql:latest
#启动
# 一般来说数据库容器不需要建立目录映射
docker run -d -p 3306:3306 --name mysql-service -e MYSQL_ROOT_PASSWORD=root mysql
#进入容器
docker exec -it mysql bash
#登录mysql
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
#添加远程登录用户
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
建立目录映射
# 建立目录映射 和 密码
docker run -p 3306:3306 --restart=always --name mysql \
-v /home/work/myspace/mysql/conf:/etc/mysql \
-v /home/work/myspace/mysql/logs:/var/log/mysql \
-v /home/work/myspace/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7 --lower_case_table_names=1
#进入容器
docker exec -it mysql bash
# 登录
mysql -u root -p
# 使用mysql库
use mysql;
update user set host='%' where user ='root';
# 刷新一下
flush privileges;
# 设置权限到root用户[不修改密码]
grant all privileges on *.* to 'root'@'%' with grant option;
# 赋予权限并修改密码
alter user 'root'@'%' identified with mysql_native_password by '123456';
# 刷新一下
flush privileges;
Docker参数说明:
-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主
ip:3306 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
启动报错常见问题
我这边使用最新的MySQL容器版本进行文件挂载启动:
docker run -p 3306:3306 --restart=always \
--name mysql-Master \
-v /home/work/myspace/mysqlMaster:/etc/mysql \
-v /home/work/myspace/mysqlMaster/logs:/logs \
-v /home/work/myspace/mysqlMaster/data:/var/lib/mysql/ \
-v /home/work/myspace/mysqlMaster/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root -d mysql \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
按道理来说需要挂载/var/lib/mysql-files
就不会报错
容器一直重启,进去不了,使用命令:docker logs -tf --tail [条目数量] [容器id]
查看日志,于是就报错如下:
Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
在网上找到的问题,是因为安全性问题,借鉴:https://github.com/docker-library/mysql/issues/541
解决方法:
- 于是进入挂载容器:
/etc/mysql
的挂载目录:cd /home/work/myspace/mysqlMaster
创建文件:vi my.cnf
- 文件内容如下:
[mysqld]
secure-file-priv= NULL
- 重启容器:
docker restart mysql-Master
问题解决 - 进入容器:
docker exec -it mysql-Master bash