It has been 1485 days since the last update, the content of the article may be outdated.

本篇文章服务于Aliyun轻量级ECS的MYSQL数据库,用于Navicat,typecho等用途的连接

root的验证方式

首先root登录,进入Mysql,因为是mysql的root验证方式为auth_socket,也就是说不通过密码验证,只能通过linux系统的root用户直接进入。

plaintext
hjh@AliECS:/home/hjh$ cat /etc/mysql/debian.cnf 
#Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = SDr2K4V3OFSD46t7
socket = /var/run/mysqld/mysqld.sock

这个password用于下一步验证

plaintext
hjh@AliECS:/home/hjh$ mysql -udebian-sys-maint -p SDr2K4V3OFSD46t7(修改)
mysql> UPDATE user SET authentication_string=PASSWORD('newpassword') where USER='root';
或者> alter user '用户名'@'登录主机' identified by '密码(自定义)'; 这种方式

此时依然会不生效,需要修改验证策略:

plaintext
mysql> use mysql;
mysql> select user, plugin from user;
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| root | auth_socket |
| debian-sys-maint | caching_sha2_password |
| mysql.infoschema | caching_sha2_password |
| mysql.session | caching_sha2_password |
| mysql.sys | caching_sha2_password |
+------------------+-----------------------+
5 rows in set (0.00 sec)
mysql> update user set plugin='caching_sha2_password' where user='root';
mysql> flush privileges;

重启服务:sudo service mysql restart

目前只是步骤是这样,但是新的加密方式sha2()需要我们在设置密码时注意加密方式,目前有待验证。

远程访问Aliyun ECS Mysql 服务器

要远程登录数据库,需要满足3个前提:

  1. 开放ALiyunECS的防火墙3306端口准入;
  2. 设置/etc/mysql/mysql.conf.d/mysqld.cnf文件:
plaintext
user		= mysql
# pid-file = /var/run/mysqld/mysqld.pid
# socket = /var/run/mysqld/mysqld.sock
port = 3306 ##默认端口
datadir = /var/lib/mysql
.....
注释掉下面的两行,即只能本地访问
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
  1. 有一个可以远程登录的账号,
    创建新用户
plaintext
mysql> use mysql;
mysql> CREATE USER 'typecho' IDENTIFIED BY '$passwd';

查看账户权限ip,%表示任何ip,也可以设置成特定’ip’地址访问权限。

plaintext
mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
+---------------------------------------+
| query |
+---------------------------------------+
| User: 'typecho'@'%'; |
| User: 'debian-sys-maint'@'localhost'; |
| User: 'mysql.infoschema'@'localhost'; |
| User: 'mysql.session'@'localhost'; |
| User: 'mysql.sys'@'localhost'; |
| User: 'root'@'localhost'; |
+---------------------------------------+
6 rows in set (0.00 sec)

示例ip修改:
mysql> update mysql.user set host='%' where user='root';

typecho是%权限,方便使用Navicat进行远程登录数据库。
以上的三个前提是对于远程访问的Mysql适用的,如果仅仅为本地云服务提供数据支持,可以不用设置。

赋予账户操作权限

按照上一步操作,Navicat连接只能看到 information_shema 一张表,这是因为typecho这个用户还没有权限。

查看typecho的权限:

plaintext
mysql> show grants for typecho;

授予typecho全局级别(全部数据库)的全部权限。

plaintext
mysql> GRANT ALL PRIVILEGES ON *.* TO 'typecho'@'%' WITH GRANT OPTION;
mysql> flush privileges;

重新连接Navicat,会发现所有的表都可以操作了。
navicat-mysql-aliyunecs

navicat-mysql-aliyunecs

【参考】轻量应用服务器MySQL远程连接踩坑