1. 拉取镜像
docker pull mysql:8.0.28
2. 创建数据目录和配置文件(跳过)
在宿主机创建放置mysql的配置文件的目录和数据目录,并且进行授权
mkdir -p /usr/mysql/conf /usr/mysql/data
chmod -R 755 /usr/mysql/
3. 创建配置文件(可以跳过)
在上面创建的配置文件目录/usr/mysql/conf下创建MySQL的配置文件my.cnf
vim /usr/mysql/conf/my.cnf
添加以下内容到上述创建的配置文件中
[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
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/
4. 启动创建容器
docker run --name mysql8 --restart=always \
-p 3305:3306 \
-v /usr/mysql/data:/var/lib/mysql \
-v /usr/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD="Abcd123." \
-e TZ=Asia/Shanghai \
-d mysql:8.0.28 --lower-case-table-names=1
参数解释:
-v : 挂载宿主机目录和 docker容器中的目录,前面是宿主机目录,后面是容器内部目录
-d : 后台运行容器
-p 映射容器端口号和宿主机端口号
-e 环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码
mysql8新增参数项:
lower_case_table_names
是否配置忽略表名大小写,1
忽略0
不忽略官方解释:
lower_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文件无效)
执行完上述命令后,执行查询容器的命令就可以看到创建的mysql容器
查看容器运行情况
$ docker ps
5. 修改mysql密码、设置远程访问
进入容器内部
$ docker exec -it mysql8 /bin/bash
连接mysql
$ mysql -uroot -p
使用mysql库
$ mysql> use mysql
修改访问主机以及密码等,设置为所有主机可访问
$ mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
注意:
这里用了mysql_native_password
,mysql8.x版本必须使用这种方式修改密码,否则navicate无法正确连接
刷新
$ mysql> flush privileges
经过以上步骤,再次远程使用Navicat连接数据库时就可以正常连接了。