在阿里云服务器Ubuntu20.04环境下,安装配置部署MySQL,并且使用Navicat Premium 16进行远程链接测试。
这里安装MySQL最新版本(默认安装)
sudo apt-get install mysql-server
不行的话先换源(其实本机上的阿里源就可以),以下以(添加)清华源为例
sudo vim /etc/apt/source.list
在最后添加以下一段:
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
执行更新后下载:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mysql-server # 默认应该是下载到最新版本
我当前的版本如下:
sudo mysql -V
mysql Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
执行以下语句进行初始化配置
sudo mysql_secure_installation
以下依次会出现几个选项供输入、选择,依次是:
ok,到这里大多数情况会出现一个报错(虽然你的密码符合强度等级要求的标准,且两次输入均一致)。暂时停在这里,再开一个命令行窗口,接入你的云服务器。直接输入mysql免密登录(刚刚安装的mysql是没有密码的,允许这样登录)。以下依次输入:
mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'yourpassword';
# 'yourpassword'的位置输入你刚刚卡住报错那个位置输入的密码
# 不要忘记打分号哦~
显示Query OK即可退出这个窗口,回到刚刚卡住的那个位置,继续输入刚刚输入的密码,并重新输入验证,选“y”,回车。这次直接通过。
之后的几个问题分别是:
以上基础配置成功,初始化完成。
首先将mysql设置为所有地址均可访问(默认是只有本地可以访问),如下:
先查看一下当前的访问状态
>use mysql;
>select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
# 可见 为 root 的用户登录,仅可本地访问(localhost)
进行修改,修改结果如下
> update user set host = '%' where user = 'root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+
执行完以上,立刻刷选权限
> FLUSH PRIVILEGES;
执行以下命令并注释掉bind-address这行
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 注意是mysqld.cnf 不是 mysql.cnf
sudo service mysql restart # 重启mysql
sudo service mysql start # 启动mysql
sudo service mysql stop # 停止mysql
sudo service mysql status # 查看当前mysql运行状态
之后依次登入mysql,切换选择mysql数据库
mysql -u root -p
# 输入密码
#以下进入mysql后选择mysql数据库
mysql> use mysql
# 显示 Database changed字样
查看mysql当前默认权限:
mysql> select user,host from user;
# 这里可以看到root访问权限是localhost,这表示远程不可访问
# 如果要远程可以访问,root必须是“%”
于是进行更改:
mysql> update user set host='%' where user='root';
# 之后可以使用以下指令再次查看
mysql> select user,host from user;
之后授权远程登录:
mysql> Grant all privileges on root.* to 'root'@'%';
修改密码规则,使得远程可以访问:
ALTER USER root IDENTIFIED with mysql_native_password by 'yourpassword';
# 以上是mysql-8之后版本的写法,以下是之前的写法
SET password for 'root'@'localhost'=password('yourpassword')
很容易被忽视的一点,如下配置,开放MySQL默认的3306端口。
命令行输入以下命令进行链接测试(前提是你的机器安装了mysql):
$ mysql -h YourRemoteIP -P 3306 -u root -p
Enter password:xxxxxxx
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.30-0ubuntu0.20.04.2 (Ubuntu)
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可视化工具都可,这里其实更建议使用MySQL WorkBench 进行远程链接测试)
密码不符合规定,强烈建议以下步骤,无论如何在上一节的“第二步”中一并执行一遍。
首先浏览一下默认的密码策略:
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.01 sec)
这里的MEDIUM改成LOW即可,具体操作如下:
mysql> set global validate_password.policy=0;
Query OK, 0 rows affected (0.00 sec)
# 其他可供选择的配置如下(不一定需要一模一样)
# 将密码默认最短长度改短:原来是8现在改成1
mysql> set global validate_password.length=1;
Query OK, 0 rows affected (0.00 sec)
# 用户名不能和密码相同?现在改为允许:
mysql> set global validate_password.check_user_name=off;
Query OK, 0 rows affected (0.00 sec)
核心参考–安装以及配置
核心参考–远程链接
报错参考–密码安全性等级修改
报错参考–阿里云开放MySQL端口