docker安装mysql

dockermysql好软推荐数据库部署 by 老李菜刀 at 2023-03-17

1、创建MySQL容器

建立目录映射

mkdir /DATA/AppData/mysql
mkdir /DATA/AppData/mysql/conf/
mkdir /DATA/AppData/mysql/logs/
mkdir /DATA/AppData/mysql/data/

创建my.cnf配置文件

nano /DATA/AppData/mysql/my.cnf
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

2、后台启动容器

docker run --restart=always --privileged=true  \
-v /DATA/AppData/mysql/data/:/var/lib/mysql \
-v /DATA/AppData/mysql/logs/:/var/log/mysql \
-v /DATA/AppData/mysql/conf/:/etc/mysql/conf.d \
-v /DATA/AppData/mysql/my.cnf:/etc/mysql/my.cnf  \
-p 3306:3306 --name CDmysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql

-v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
--restart=always: 当Docker 重启时,容器会自动启动。
--privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限

报如下错误,那是因为MYSQL新特性secure_file_priv对读写文件的影响

ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"

mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2023-03-14T09:52:51.015937Z 0 [ERROR] [MY-010095] [Server] 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
2023-03-14T09:52:51.018328Z 0 [ERROR] [MY-010119] [Server] Aborting

解决方法:
修改my.cnf 在[mysqld]内加入secure_file_priv=/var/lib/mysql

3、连接MySQL

进入mysql容器

docker exec -it CDmysql /bin/bash

登陆mysql

mysql -uroot -p

创建数据库

create DATABASE piwigo;

mysql 8 设置允许远程用户访问

update user set host = '%' where user = 'root' and host='localhost'; # 更新root - localhost 为 root - %

GRANT ALL ON *.* TO 'root'@'%'; # 设置允许远程用户访问

flush privileges;# 刷新权限

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';#更新用户加密方式,mysql8默认的加密方式为caching_sha2_password 与mysql5的加密方式mysql_native_password 不同