mysql 从安装到连接

说在前面

本文所有前缀以 CUSTOM_ 的字段, 都表示你需要改为你自己的值,
CUSTOM_YOUR_PASSWORD, 表示你需要替换为你自己的密码;

本文所有前缀以 mysql> 的命令, 都表示该条命令处于 mysql 环境, 输命令时是不需要输入 mysql>

安装及启动

sudo apt install mysql-server

sudo systemctl start mysql

[可选] 配置 root 用户密码

最开始 root 用户是没有密码的, 我们给它配置一个密码, 当然不配置密码也无所谓, 密码强弱也无所谓, 因为 root 的 host 是 localhost, 外网访问不了

sudo mysql

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'CUSTOM_YOUR_PASSWORD';
mysql> exit;

[可选] 配置公网可访问

如果你不需要公网访问, 可以忽略该段

添加/编辑 bind-address, 以使公网可访问;

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 在文件 "/etc/mysql/mysql.conf.d/mysqld.cnf" 中, 添加/编辑 bind-address, 设置为 0.0.0.0
bind-address = 0.0.0.0

创建数据库

sudo mysql -u root -p

mysql> CREATE DATABASE CUSTOM_YOUR_DATABASE;

创建用户, [可选] 配置外网访问权限

@'%' 表示 host%, 即任意地址可访问 (如需配置特定地址/禁止外网访问, 可另查资料)

仅内网可访问是 @'localhost'

只有 host% 的用户, 才能外网访问;

# 这个密码必须很强, 因为这个用户是外网访问的 (如果你仅内网可访问, 那就无所谓了)
mysql> CREATE USER 'CUSTOM_USER'@'%' IDENTIFIED BY 'CUSTOM_YOUR_PASSWORD';
mysql> GRANT ALL PRIVILEGES ON CUSTOM_YOUR_DATABASE.* TO 'CUSTOM_USER'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit;

# 重启 mysql
sudo systemctl restart mysql

常见问题与排查

如果外网访问不了, 你可以检查:

  • 域名/用户名/密码/数据库名 是否正确
  • 用户 host 是否为 %
    • 检查用户 host 的命令是 mysql> select user, host from mysql.user;
  • 腾讯云/阿里云 防火墙端口是否开放
  • 用户等杂七杂八的东西配置完后, 是否忘了重启 mysql

外网客户端可以连上, prisma 死活连不上

执行 npx prisma db push 报错:

Error: P1001: Can't reach database server at `xxx.xxx.xx.xx`:`3306`

可以先执行 npx prisma db seed (嗯嗯, 也会报错), 然后再执行 npx prisma db push, 就 OK 了

设置密码抛错

有时候不小心将密码强度设置有误, 修改密码的时候抛错:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

可以修改密码策略:

# 列出当前密码校验的策略
mysql> SHOW VARIABLES LIKE 'validate_password%';

+-------------------------------------------------+--------+
| Variable_name                                   | Value  |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0      |
| 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      |
+-------------------------------------------------+--------+

# 然后就可以调整密码策略了, 例如不要特殊字符:
mysql> SET GLOBAL validate_password.special_char_count = 0;

如非特别声明,本站作品均为原创,遵循【自由转载-保持署名-非商用-非衍生 创意共享 3.0 许可证】。

对于转载作品,如需二次转载,请遵循原作许可。