#opt目录是Linux提供我们扩展的目录,可以存放用户需求的文件
mkdir -p /opt/datas/docker/mysql/conf
mkdir -p /opt/datas/docker/mysql/data
在上面创建的配置文件目录/opt/datas/docker/mysql/conf下创建MySQL的配置文件my.cnf
vim /opt/datas/docker/mysql/conf/my.cnf
#关于vim的操作
#1.i : 进入insert模式
#2.Ctrl + C : 回过一般模式
#3.:wq : 写入数据并且退出
添加以下内容到上述创建的配置文件中
[client]
#socket = /usr/mysql/mysqld.sock
default-character-set = utf8mb4
[mysqld]
#pid-file = /var/run/mysqld/mysqld.pid
#socket = /var/run/mysqld/mysqld.sock
#datadir = /var/lib/mysql
#socket = /usr/mysql/mysqld.sock
#pid-file = /usr/mysql/mysqld.pid
datadir = /opt/datas/docker/mysql/data
character_set_server = utf8mb4
collation_server = utf8mb4_bin
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
docker pull mysql:latest
docker run \
--name mysql8 \
--restart=unless-stopped \
-it -p 3306:3306 \
-v /opt/datas/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /opt/datas/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
参数说明:
–restart=unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
-p 3306:3306:映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
-e 环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码—可以自行更改
-d 后台运行
报错信息:
Client does not support authentication protocol requested by server; consider upgrading MySQL client
上述虽然安装好了MySQL,但是使用远程的Navicat连接时提示错误,不能正确连接mysql,造成该问题的原因是,mysql5.7前的加密方式是mysql_native_password,mysql8的加密方式是caching_sha2_password,如下为mysql 8加密方式示例此时需要修改按照下面说的步骤修改一下MySQL的密码模式以及主机等内容才可以。
docker exec -it mysql8 /bin/bash
mysql -u root -p
#输入你的密码
use mysql
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
注意:
mysql_native_password,mysql8.x版本必须使用这种模式,否则navicate无法正确连接
flush privileges;
经过以上步骤,远程使用Navicat连接数据库时就可以正常连接了。
报错信息:
Incorrect datetime value: ‘0000-00-00 00:00:00’ for column
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select @@global.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> set global sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected, 1 warning (0.00 sec)
#退出
mysql> \q
Bye
以上都是我在学习过程中真正遇到的问题和相对应的解决方法,希望对你有所帮助。