如何在 Debian 10 Linux 上安装 MySQL 服务器
Oracle MySQL 服务器版本 8.0 是一个开源且免费的数据库,互联网上大多数 Web 应用程序和网站都在使用它。通常,MySQL 是 LAMP(Linux、Apache/Nginx、MySQL、Perl/Python/PHP)堆栈的一部分。流行的开源软件(如 WordPress、MediaWiki 等)被 MySQL 大量用作数据库存储引擎。让我们看看如何在 Debian 10 LTS Linux 服务器上为您的 Web 应用程序或论坛或自定义系统安装 MySQL 服务器版本 8.x。
教程要求 | |
---|---|
要求 | Debian Linux 10 LTS |
Root 权限 | 是的 |
难度等级 | 简单的 |
预计阅读时间 | 7 分钟 |
如何在 Debian 10 LTS 服务器上安装 MySQL 服务器
打开终端窗口并使用 ssh 命令登录到您的服务器,然后更新 Debian 系统以在 Debian Linux 系统上应用安全更新和修复:安装全新的 Linux 内核后,
请确保重新启动 Linux 系统:
$ sudo apt update
$ sudo apt upgrade
$ sudo shutdown -r now 'Going down for Debian kernel update'
步骤 1 - 安装 MySQL 服务器
我们将使用 MySQL社区版(记下文件和 md5 哈希值)。它是世界上最流行的开源数据库的免费下载版本。首先,我们需要添加 Debian 10 的 MySQL APT 存储库。运行:
$ wget https://dev.mysql.com/get/mysql-apt-config_0.8.16-1_all.deb
验证 MD5 校验和非常简单:
我们将看到以下内容:
$ echo 'f6a7c41f04cc4fea7ade285092eea77a mysql-apt-config_0.8.16-1_all.deb' > file
$ md5sum -c file
mysql-apt-config_0.8.16-1_all.deb: OK
但是,使用 GnuPG 进行签名检查更安全。接下来,使用apt 命令或 dpkg 命令安装名为 mysql-apt-config_0.8.16-1_all.deb 的文件:
$ sudo apt install ./mysql-apt-config_0.8.16-1_all.deb
在软件包安装过程中,系统会要求您选择 MySQL 服务器和其他组件的版本,如下所示:
您希望使用哪个服务器版本?我将坚持使用 8.x 版本:
最后选择确定。接下来,我们从 MySQL APT 存储库更新软件包信息,然后安装 MySQL 8.0 版本:
在安装过程中,系统会要求您为 MySQL 系统的 root 用户提供密码:
$ sudo apt update
$ sudo apt install mysql-server
第 2 步 - 保护 MySQL 服务器
我们需要运行能够让我们通过以下方式提高 MySQL 服务器安全性的程序:
- 为 root 账户设置密码。
- 删除可从本地主机外部访问的 root 帐户。
- 删除匿名用户帐户和测试数据库(默认情况下所有用户甚至匿名用户都可以访问)以及允许任何人访问以 test_ 开头的名称的数据库的权限。
执行:
$ sudo mysql_secure_installation
提高 MySQL 服务器安全性
步骤 3 - 在启动时控制 MySQL 服务器
在 Debian 10 LTS 重启时启用并启动服务器:
$ sudo systemctl is-enabled mysql.service
如果未启用,请键入以下命令来启用服务器:
$ sudo systemctl enable mysql.service
通过键入以下 systemctl 命令来验证服务器状态:
$ sudo systemctl status mysql.service
我们将看到:
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-11-07 15:44:00 UTC; 25min ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 1860 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 1895 (mysqld) Status: "Server is operational" Tasks: 38 (limit: 4680) Memory: 329.3M CGroup: /system.slice/mysql.service └─1895 /usr/sbin/mysqld Nov 07 15:44:00 debian-aws-mysql systemd[1]: Starting MySQL Community Server... Nov 07 15:44:00 debian-aws-mysql systemd[1]: Started MySQL Community Server.
步骤 4 – 启动和停止 MySQL 服务器
我们可以使用 CLI 控制 Debian Linux 上的 MySQL 服务器: 如果服务器未运行,让我们启动它:
$ sudo systemctl start mysql.service
停止 MySQL 服务器,输入:
$ sudo systemctl stop mysql.service
重新启动 MySQL 服务器,如下所示:
$ sudo systemctl restart mysql.service
我们可以使用 journalctl 命令查看 MySQL 服务日志,如下所示:会话:
$ sudo journalctl -u mysql.service -xe
$ sudo tail -f /var/log/mysql/error.log
2020-11-07T15:43:58.019666Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/tmp' in the path is accessible to all OS users. Consider choosing a different directory. 2020-11-07T15:43:58.049176Z 7 [System] [MY-013172] [Server] Received SHUTDOWN from user boot. Shutting down mysqld (Version: 8.0.22). 2020-11-07T15:43:59.625343Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.22) MySQL Community Server - GPL. 2020-11-07T15:44:00.530816Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.22) starting as process 1895 2020-11-07T15:44:00.541857Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2020-11-07T15:44:00.795781Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2020-11-07T15:44:00.905407Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock 2020-11-07T15:44:00.976732Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. 2020-11-07T15:44:00.976916Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. 2020-11-07T15:44:00.999492Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.22' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
步骤 5 – 登录 MySQL 服务器进行测试
到目前为止一切顺利。我们发现了如何在 Debian 10 Linux 系统上安装、设置、保护和启动/停止 Oracle MySQL 服务器社区版 8.x。现在是时候以 mysql 管理员(root)用户身份登录了。语法也很简单:
$ mysql -u root -p
$ mysql -u USER -h host -p
$ mysql -u USER -h HOST_NAME_IP_HERE -p DB_NAME
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 8.0.22 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>STATUS 命令在提示符下显示版本和其他信息:
STATUS;
我们看到:
-------------- mysql Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL) Connection id: 12 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 8.0.22 MySQL Community Server - GPL Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 UNIX socket: /var/run/mysqld/mysqld.sock Binary data as: Hexadecimal Uptime: 32 min 47 sec Threads: 2 Questions: 17 Slow queries: 0 Opens: 128 Flush tables: 3 Open tables: 49 Queries per second avg: 0.008 --------------
我们可以看到 MySQL 版本如下:
SHOW VARIABLES LIKE "%version%";
我们再次获得详细信息:
+--------------------------+-------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------+ | admin_tls_version | TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 | | immediate_server_version | 999999 | | innodb_version | 8.0.22 | | original_server_version | 999999 | | protocol_version | 10 | | slave_type_conversions | | | tls_version | TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 | | version | 8.0.22 | | version_comment | MySQL Community Server - GPL | | version_compile_machine | x86_64 | | version_compile_os | Linux | | version_compile_zlib | 1.2.11 | +--------------------------+-------------------------------+ 12 rows in set (0.01 sec)
步骤 6 - 创建新的 MySQL 数据库和用户/密码
让我们创建一个名为 example 的新数据库,在获得 root mysql shell 后输入以下 SQL 命令:
CREATE DATABASE example;
接下来,我们将为名为“example”的数据库创建一个名为“vivekdada”的新用户,如下所示:
最后,授予权限:
当然,我也可以授予所有数据库级别的权限:
我们可以看到 MySQL 用户授予如下权限:
测试如下:
其中,
# CREATE USER 'vivekdada'@'%' IDENTIFIED BY 'STRONG_PASSWORD_HERE';
CREATE USER 'vivekdada'@'%' IDENTIFIED BY 'e3b0c44298fc1C_D8b7852b85';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON example.* TO 'vivekdada'@'%';
GRANT ALL ON example.* TO 'vivekdada'@'%';
SELECT user,host FROM mysql.user;
SHOW GRANTS for vivekdada;
$ mysql -u vivekdada -p example
$ mysql -u vivekdada -h localhost -p example
- -u vivekdada:用户为登录名
- -h localhost:连接到名为“localhost”的主机
- -p:提示输入密码
- example:连接到名为“example”的数据库
结论
现在,我们已经在 Debian Linux 10 LTS 服务器上正确设置并运行了 Oracle MySQL 社区服务器版本 8.x。此外,您还学习了如何为项目添加新数据库、用户和密码。最后,我们添加了一个管理员用户来执行日常 MySQL 服务器管理任务。