CentOS 8中Docker安装MySQL8

本文档详细介绍了如何使用Docker下载并安装MySQL8.0,包括创建挂载目录、启动与停止容器、配置用户权限等步骤,并提供了安全措施如禁止root用户远程登录。此外,还涵盖了配置文件的拷贝、用户创建与授权、权限刷新以及连接验证的过程。
摘要由CSDN通过智能技术生成

一、docker下载mysql

1.1、官网版本确认

  我们通过 docker 下载 mysql-8.0.28 ,具体的版本需要去官网查看 https://hub.docker.com/_/mysql?tab=tags ,不是你随便写多少就多少的,截止到2020年2月19日,官方支持的版本如下:

  • 8.0.28-oracle,8.0-oracle,8-oracle,oracle
  • 8.0.28,8.0,8,latest,8.0.28-debian,8.0-debian,8-debian,debian
  • 5.7.37-oracle, 5.7-oracle,5-oracle
  • 5.7.37,5.7,5,5.7.37-debian,5.7-debian,5-debian

1.2、下载

#下载mysql-8.0.28
docker pull mysql:8.0.28

  这里的 mysql:8.0.28 是指定版本,如果没有指定的话就是下载 latest 版本,运行结果:

8.0.28: Pulling from library/mysql
6552179c3509: Pull complete 
d69aa66e4482: Pull complete 
3b19465b002b: Pull complete 
7b0d0cfe99a1: Pull complete 
9ccd5a5c8987: Pull complete 
2dab00d7d232: Pull complete 
64d3afdccd4a: Pull complete 
82148d50b16c: Pull complete 
8bb7d73a7d0c: Pull complete 
74778cd68a75: Pull complete 
d7e5f9309140: Pull complete 
f2e376ecd59f: Pull complete 
Digest: sha256:92d27b8222bbcf53bc42c70ca7cd1010d6c0527efc61f14980ce77c50932bef4
Status: Downloaded newer image for mysql:8.0.28
docker.io/library/mysql:8.0.28

  我们可以通过 docker images 查看我们刚下载的镜像

#查看镜像
docker images

运行结果:

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        8.0.28    d1dc36cf8d9e   3 weeks ago   519MB

二、安装前准备

2.1、创建挂载目录

  创建几个目录作为数据卷的目录,存储配置文件,数据及日志

#mysql配置文件
mkdir -p /etc/mysql
#mysql数据卷目录
mkdir -p /var/lib/mysql

2.2、启动mysql

  第一次启动我们的mysql(具体的命令解释在下面的章节3.2)

#简单启动
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.28

  接下来查看状态,如果启动成功

#查看状态
docker ps

运行结果:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
88ddd10ea3a6   mysql:8.0.28   "docker-entrypoint.s…"   28 seconds ago   Up 28 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

  我们通过交互模式可以进入到容器,然后进行mysql登录

#docker exec -it 容器id /bin/bash
#注意这里的88ddd10ea3a6 就是上面查出来的容器id
docker exec -it 88ddd10ea3a6 /bin/bash

  mysql用户是root,密码是我们设置的123456

root@88ddd10ea3a6:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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登录成功了我们可以看看和日志相关的信息,可以根据自己的需要进行配置。

mysql> show variables like '%log%';
+------------------------------------------------+---------------------------------------------+
| Variable_name                                  | Value                                       |
+------------------------------------------------+---------------------------------------------+
| activate_all_roles_on_login                    | OFF                                         |
| back_log                                       | 151                                         |
| binlog_cache_size                              | 32768                                       |
| binlog_checksum                                | CRC32                                       |
| binlog_direct_non_transactional_updates        | OFF                                         |
| binlog_encryption                              | OFF                                         |
| binlog_error_action                            | ABORT_SERVER                                |
| binlog_expire_logs_seconds                     | 2592000                                     |
| binlog_format                                  | ROW                                         |
| binlog_group_commit_sync_delay                 | 0                                           |
| binlog_group_commit_sync_no_delay_count        | 0                                           |
| binlog_gtid_simple_recovery                    | ON                                          |
| binlog_max_flush_queue_time                    | 0                                           |
| binlog_order_commits                           | ON                                          |
| binlog_rotate_encryption_master_key_at_startup | OFF                                         |
| binlog_row_event_max_size                      | 8192                                        |
| binlog_row_image                               | FULL                                        |
| binlog_row_metadata                            | MINIMAL                                     |
| binlog_row_value_options                       |                                             |
| binlog_rows_query_log_events                   | OFF                                         |
| binlog_stmt_cache_size                         | 32768                                       |
| binlog_transaction_compression                 | OFF                                         |
| binlog_transaction_compression_level_zstd      | 3                                           |
| binlog_transaction_dependency_history_size     | 25000                                       |
| binlog_transaction_dependency_tracking         | COMMIT_ORDER                                |
| expire_logs_days                               | 0                                           |
| general_log                                    | OFF                                         |
| general_log_file                               | /var/lib/mysql/88ddd10ea3a6.log             |
| innodb_api_enable_binlog                       | OFF                                         |
| innodb_flush_log_at_timeout                    | 1                                           |
| innodb_flush_log_at_trx_commit                 | 1                                           |
| innodb_log_buffer_size                         | 16777216                                    |
| innodb_log_checksums                           | ON                                          |
| innodb_log_compressed_pages                    | ON                                          |
| innodb_log_file_size                           | 50331648                                    |
| innodb_log_files_in_group                      | 2                                           |
| innodb_log_group_home_dir                      | ./                                          |
| innodb_log_spin_cpu_abs_lwm                    | 80                                          |
| innodb_log_spin_cpu_pct_hwm                    | 50                                          |
| innodb_log_wait_for_flush_spin_hwm             | 400                                         |
| innodb_log_write_ahead_size                    | 8192                                        |
| innodb_log_writer_threads                      | ON                                          |
| innodb_max_undo_log_size                       | 1073741824                                  |
| innodb_online_alter_log_max_size               | 134217728                                   |
| innodb_print_ddl_logs                          | OFF                                         |
| innodb_redo_log_archive_dirs                   |                                             |
| innodb_redo_log_encrypt                        | OFF                                         |
| innodb_undo_log_encrypt                        | OFF                                         |
| innodb_undo_log_truncate                       | ON                                          |
| log_bin                                        | ON                                          |
| log_bin_basename                               | /var/lib/mysql/binlog                       |
| log_bin_index                                  | /var/lib/mysql/binlog.index                 |
| log_bin_trust_function_creators                | OFF                                         |
| log_bin_use_v1_row_events                      | OFF                                         |
| log_error                                      | stderr                                      |
| log_error_services                             | log_filter_internal; log_sink_internal      |
| log_error_suppression_list                     |                                             |
| log_error_verbosity                            | 2                                           |
| log_output                                     | FILE                                        |
| log_queries_not_using_indexes                  | OFF                                         |
| log_raw                                        | OFF                                         |
| log_replica_updates                            | ON                                          |
| log_slave_updates                              | ON                                          |
| log_slow_admin_statements                      | OFF                                         |
| log_slow_extra                                 | OFF                                         |
| log_slow_replica_statements                    | OFF                                         |
| log_slow_slave_statements                      | OFF                                         |
| log_statements_unsafe_for_binlog               | ON                                          |
| log_throttle_queries_not_using_indexes         | 0                                           |
| log_timestamps                                 | UTC                                         |
| max_binlog_cache_size                          | 18446744073709547520                        |
| max_binlog_size                                | 1073741824                                  |
| max_binlog_stmt_cache_size                     | 18446744073709547520                        |
| max_relay_log_size                             | 0                                           |
| relay_log                                      | 88ddd10ea3a6-relay-bin                      |
| relay_log_basename                             | /var/lib/mysql/88ddd10ea3a6-relay-bin       |
| relay_log_index                                | /var/lib/mysql/88ddd10ea3a6-relay-bin.index |
| relay_log_info_file                            | relay-log.info                              |
| relay_log_info_repository                      | TABLE                                       |
| relay_log_purge                                | ON                                          |
| relay_log_recovery                             | OFF                                         |
| relay_log_space_limit                          | 0                                           |
| slow_query_log                                 | OFF                                         |
| slow_query_log_file                            | /var/lib/mysql/88ddd10ea3a6-slow.log        |
| sql_log_bin                                    | ON                                          |
| sql_log_off                                    | OFF                                         |
| sync_binlog                                    | 1                                           |
| sync_relay_log                                 | 10000                                       |
| sync_relay_log_info                            | 10000                                       |
| terminology_use_previous                       | NONE                                        |
+------------------------------------------------+---------------------------------------------+

2.3、拷贝配置文件到宿主机

  首先我们把mysql的配置文件my.cnf从容器拷贝到宿主机,从上面我们知道数据和日志在一个目录,我们就挂载一个卷就好了,如果你想分开,你可以通过配置my.cnf来指定。

#ctrl + d退出容器
#文件my.cnf从容器拷贝到宿主机,88ddd10ea3a6 就是上面查出来的容器id
docker cp 88ddd10ea3a6:/etc/mysql/my.cnf /etc/mysql
docker cp 88ddd10ea3a6:/etc/mysql/conf.d /etc/mysql

2.4、停止并删除mysql容器

  我们第一次启动只是为了拿到容器的配置,如果你能手动编写或者是同一个版本的备份就不用操作了,但是这样可以确保不会有问题。

#停止容器
docker stop 88ddd10ea3a6
#删除容器
docker rm 88ddd10ea3a6

三、正式启动

  接下里我们再次启动这个容器,当然如果你手动编写mysql的配置文件就不用这么麻烦,直接启动就行了。

3.1、启动命令

#首次启动
docker run -dit \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e LANG=C.UTF-8 \
-v /etc/mysql/:/etc/mysql \
-v /var/lib/mysql:/var/lib/mysql \
mysql:8.0.28

3.2、命令解释

命令说明
docker run启动一个容器
–name指定容器的名称
–p端口暴露(宿主机端口:容器端口)
-v目录挂载(宿主机目录:容器目录)
-e设置容器中的环境变量
-it与容器交互,可以进入容器
-d后台启动容器

  我们这里主要意思是用交互模式后台启动一个名称为mysql的容器,同时设置了两个环境变量(语言和密码),同时挂载了两个目录(配置和数据),也暴露了容器的端口(主机通过3306映射到容器的3306端口)

3.3、挂载验证

  通过命令查看挂载的目录

[root@Alian-ECS lib]# ll /var/lib/mysql/
总用量 198056
-rw-r----- 1 systemd-coredump input     1382 2月  20 17:02  419413b9d276.err
-rw-r----- 1 systemd-coredump input       56 2月  20 17:02  auto.cnf
-rw-r----- 1 systemd-coredump input  3116922 2月  20 17:02  binlog.000001
-rw-r----- 1 systemd-coredump input      157 2月  20 17:02  binlog.000002
-rw-r----- 1 systemd-coredump input       32 2月  20 17:02  binlog.index
-rw------- 1 systemd-coredump input     1680 2月  20 17:02  ca-key.pem
-rw-r--r-- 1 systemd-coredump input     1112 2月  20 17:02  ca.pem
-rw-r--r-- 1 systemd-coredump input     1112 2月  20 17:02  client-cert.pem
-rw------- 1 systemd-coredump input     1676 2月  20 17:02  client-key.pem
-rw-r----- 1 systemd-coredump input   196608 2月  20 17:02 '#ib_16384_0.dblwr'
-rw-r----- 1 systemd-coredump input  8585216 2月  20 17:02 '#ib_16384_1.dblwr'
-rw-r----- 1 systemd-coredump input     5701 2月  20 17:02  ib_buffer_pool
-rw-r----- 1 systemd-coredump input 12582912 2月  20 17:02  ibdata1
-rw-r----- 1 systemd-coredump input 50331648 2月  20 17:02  ib_logfile0
-rw-r----- 1 systemd-coredump input 50331648 2月  20 17:02  ib_logfile1
-rw-r----- 1 systemd-coredump input 12582912 2月  20 17:02  ibtmp1
drwxr-x--- 2 systemd-coredump input      187 2月  20 17:02 '#innodb_temp'
drwxr-x--- 2 systemd-coredump input      143 2月  20 17:02  mysql
-rw-r----- 1 systemd-coredump input 31457280 2月  20 17:02  mysql.ibd
drwxr-x--- 2 systemd-coredump input     8192 2月  20 17:02  performance_schema
-rw------- 1 systemd-coredump input     1680 2月  20 17:02  private_key.pem
-rw-r--r-- 1 systemd-coredump input      452 2月  20 17:02  public_key.pem
-rw-r--r-- 1 systemd-coredump input     1112 2月  20 17:02  server-cert.pem
-rw------- 1 systemd-coredump input     1680 2月  20 17:02  server-key.pem
drwxr-x--- 2 systemd-coredump input       28 2月  20 17:02  sys
-rw-r----- 1 systemd-coredump input 16777216 2月  20 17:02  undo_001
-rw-r----- 1 systemd-coredump input 16777216 2月  20 17:02  undo_002

四、配置

4.1、用户信息查看

  首先查看mysql库的user表,这个表就是数据里的用户

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 user,host,plugin from user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

4.2、修改root账户的密码

  

#注意密码加密方式为caching_sha2_password 
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'xxxxxxxx';

4.3、禁止root用户远程登录

  root账户远程登录是非常危险的,建议删除或者改成其他运行网段。

#删除'root'@'%'即可
drop user 'root'@'%';

4.4、创建用户

CREATE USER 'alian'@'%' IDENTIFIED WITH mysql_native_password BY 'Alian1223';

关于 用户名@地址 的说明(这里都是英文的单引号):

  • ’alian’@'localhost’ :表示只允许本机登录
  • ’alian’@’%' :表示任意地址登录
  • ’alian’@'192.168.0.100’ :表示只允许ip为192.168.0.100的地址登录
  • ’alian’@'192.168.*.*' :表示只允许ip为192.168网段的地址登录

  MySQL8开始使用 caching_sha2_password ,如果你使用sqlyog工具无法连接,报错 2058 ,有两种方式处理:

  • 升级sqlyog到 SQLyog-13.1.6-0.x64 以上
  • 修改mysql默认身份验证插件为 mysql_native_password

4.5、用户授权

grant all privileges on mysql.* to "alian"@'%';
  • . 表示任意库的任意表(不建议)
  • mysql.* 表示mysql库的任意表
  • mysql.user 表示mysql库的user表

privileges 可以用以下语句去查询

show grants for alian;

常见的权限如下:

SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,
PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, 
CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE,
REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, 
ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, 
CREATE ROLE, DROP ROLE 

4.6、刷新权限

flush privileges;

五、验证连接

5.1、创建连接

在这里插入图片描述

5.2、结果

在这里插入图片描述

5.3、端口

因为我们启动的时候是容器的3306端口映射到宿主机的3306端口,所以要把宿主机的3306打开:

vim /etc/sysconfig/iptables
#新加一条
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
#重新加载防火墙配置
service iptables reload

如果是阿里云服务器,则需要通过,登录阿里云服务控制台,然后按照如下图操作即可:
在这里插入图片描述

学习计划:

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值