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;