欢迎光临
我们一直在努力

【Docker】 安装 mysql8.0

目录

  • 前言
  • 准备
  • 拉取镜像
  • 创建容器
    • 创建容器方式1:快速创建容器
    • 创建容器方式2:创建容器+配置文件+数据目录
    • my.cnf
  • 运行容器
  • 命令行登录mysql
  • 容器设置
    • 容器随 docker 自动启动
    • 容器设置IP
  • mysql设置
    • 修改密码
    • 设置mysql数据编码格式为utf8mb4
    • 查看mysql表名不区分大小写
    • 设置 mysql 时区
    • 远程访问授权
  • 参考

前言

  • CentOS 7.9
  • Docker Version: 1.13.1

准备

  • docker 已安装。

  • 选择合适的mysql镜像(mysql:5.7.31)。

拉取镜像

shell> docker pull mysql:8.0.34
Trying to pull repository docker.io/library/mysql ...
5.7.31: Pulling from docker.io/library/mysql
bb79b6b2107f: Pull complete
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
6d2fc69dfa35: Pull complete
56153548dd2c: Pull complete
3bb6ba940303: Pull complete
3e1888da91a7: Pull complete
Digest: sha256:b3dc8d10307ab7b9ca1a7981b1601a67e176408be618fc4216d137be37dae10b
Status: Downloaded newer image for docker.io/mysql:5.7.31

查看已拉取的镜像

shell> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hello-world latest feb5d9fea6a5 6 weeks ago 13.3 kB
docker.io/mysql 5.7.31 42cdba9f1b08 12 months ago 448 MB

创建容器

创建容器方式1:快速创建容器

shell> docker create -p 3306:3306 \\
-e MYSQL_ROOT_PASSWORD='my-secret-pw' \\
-e LOWER_CASE_TABLE_NAMES=1 \\
–name mysql1 mysql:8.0.34 \\
–lower-case-table-names=1 \\
–character-set-server=utf8mb4 \\
–collation-server=utf8mb4_unicode_ci

创建容器方式2:创建容器+配置文件+数据目录

shell> docker create \\
-v /data/mysql1/data:/var/lib/mysql \\
-v /data/mysql1/conf.d:/etc/mysql/conf.d \\
-e MYSQL_ROOT_PASSWORD='my-secret-pw' \\
-p 3306:3306 \\
–name mysql1 mysql:8.0.34

  • –restart=always: 自动运行
  • -v /data/mysql1/data:/var/lib/mysql: 将宿主机的/data/mysql1/data挂载成容器的/var/lib/mysql
  • -v /data/mysql1/conf.d:/etc/mysql/conf.d: 将宿主机的/data/mysql1/conf.d挂载成容器的/etc/mysql/conf.d

my.cnf

使用“创建容器方式2”时,需要在/data/mysql1/conf.d目录下创建my.cnf文件,内容如下:

[mysqld]
# 默认密码插件,兼容旧版本的客户端
default_authentication_plugin=mysql_native_password
# authentication_policy=mysql_native_password,caching_sha2_password

# 字符集配置
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

# 表名不区分大小写 (0:区分, 1:不区分, 2:按文件系统)
lower_case_table_names=1

max_connections=1000
innodb_buffer_pool_size=256M

sql_mode=

[client]
default-character-set=utf8mb4
# default-auth=mysql_native_password

[mysql]
default-character-set=utf8mb4

[mysqladmin]
default-character-set=utf8mb4

  • lower_case_table_names (表名不区分大小写)设置,在 MySQL 8.0+ 中,必须在初次初始化时设置,如果已经有数据了再修改就会报错。因此,在首次启动容器前,必须准备好my.cnf文件。

运行容器

shell> docker start mysql1

命令行登录mysql

shell> docker exec -it mysql1 bash
root@a6f9e4a700a3:/# mysql -uroot -pmy-secret-pw
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 2
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.

mysql> exit
Bye

或者:

shell> docker exec -it mysql1 mysql -uroot -pmy-secret-pw
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 2
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.

mysql> exit
Bye

容器设置

容器随 docker 自动启动

设置容器的重启策略

shell> docker update –restart=always mysql1

  • 每次docker启动时,容器也会自动启动

容器设置IP

向网络中添加容器

shell> docker network connect –ip 172.19.0.2 mynetwork mysql1

  • docket ip : 172.19.0.2

mysql设置

修改密码

mysql> set password='123456';

设置mysql数据编码格式为utf8mb4

shell> vim /data/mysql1/conf.d/my.cnf
# 打开文件(没有该文件时,创建它)后,添加下面的配置。注意对应节点
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'

重启mysql并查看设置

shell> docker exec -it mysql1 mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 2
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.

mysql> SHOW variables WHERE variable_name like 'character\\_set\\_%' OR variable_name like 'collation%';
+————————–+——————–+
| Variable_name | Value |
+————————–+——————–+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+————————–+——————–+
10 rows in set (0.01 sec)

mysql> exit
Bye

查看mysql表名不区分大小写

shell> docker exec -it mysql1 mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 2
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.

mysql> show variables like '%table_names';
+————————+——-+
| Variable_name | Value |
+————————+——-+
| lower_case_table_names | 1 |
+————————+——-+
1 row in set (0.00 sec)

mysql> exit
Bye

设置 mysql 时区

时区设置成东八区

shell> vim /data/mysql1/conf.d/my.cnf
—————————–
# 打开文件后,添加下面的配置。注意对应节点
[mysqld]
default-time_zone = '+8:00'

重启mysql并查看设置

shell> docker exec -it mysql1 mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 2
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.

mysql> show variables like '%time_zone%';
+——————+——–+
| Variable_name | Value |
+——————+——–+
| system_time_zone | UTC |
| time_zone | +08:00 |
+——————+——–+
2 rows in set (0.00 sec)

mysql> exit
Bye

远程访问授权

参考这里。

参考

https://hub.docker.com/_/mysql

赞(0)
未经允许不得转载:171主机测评 » 【Docker】 安装 mysql8.0
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址