云服务器安装mysql8 遇到很多坑 特此记录。
远程连接部分参考了:https://kalacloud.com/blog/how-to-allow-remote-access-to-mysql/的内容
1、删除mysql的数据文件
sudo rm /var/lib/mysql/ -R
2、删除mysql的配置文件
sudo rm /etc/mysql/ -R
3、自动卸载mysql(包括server和client)
sudo apt-get autoremove mysql* --purge
sudo apt-get remove apparmor
# 或者
sudo apt purge mysql-*
sudo rm -rf /etc/mysql/ /var/lib/mysql
sudo apt autoremove
sudo apt autoclean
4、在终端中查看MySQL的依赖项
dpkg --list|grep mysql
5、安装MySQL服务
sudo apt-get update # 更新源
sudo apt-get install mysql-server # 安装
6、mysql服务管理
sudo service mysql status # 查看服务状态
sudo service mysql start # 启动服务
sudo service mysql stop # 停止服务
sudo service mysql restart # 重启服务
7、登陆
# 查看密码
sudo cat /etc/mysql/debian.cnf
# 使用默认用户登陆
mysql -u debian-sys-maint -p
# 或者直接进入mysql
sudo mysql
8、创建新用户
# 新建用户admin 密码是12345678
create user 'admin'@'%' identified by '12345678';
9、修改密码
在MySQL 8.04前,执行:SET PASSWORD=PASSWORD(‘[新密码]’);但是MySQL8.0.4开始,这样默认是不行的。因为之前,MySQL的密码认证插件是“mysql_native_password”,而现在使用的是“caching_sha2_password”。
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
FLUSH PRIVILEGES;
# 或者
mysqladmin -u root -p password '新密码'
# 新密码即要修改的密码,回车之后会要求让输入原始密码,然后就修改了密码
10、查看MySQL 当前加密方式
select host,user,plugin from user;
# 使用命令将他修改成mysql_native_password加密模式
update user set plugin='mysql_native_password' where user='root';
11、设置允许远程连接1
# 首先打开 mysqld.cnf 配置文件,将 bind - address 修改成0.0.0.0 或者 * 或者 :: ,也可以是单独固定的ip 这样更安全
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# 在某些 MySQL 版本的配置文件中,没有 bind - address 这一行,这种情况下,在合适的位置加上就可以了。
# 然后重启 MySQL 服务,使刚刚编辑的 mysqld.cnf 文件生效
sudo systemctl restart mysql
12、设置允许远程连接2
# 服务器端登陆mysql, 创建或者修改用户为允许远程用户
# 1.创建
CREATE USER 'kalacloud-remote'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
# 2.修改现有用户
ALTER USER 'kalacloud-remote'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
# 3.给远程账号赋予权限
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'kalacloud-remote'@'%' WITH GRANT OPTION;
# 4.刷新 MySQL 的系统权限相关表,更新缓存。
FLUSH PRIVILEGES;
# 5.退出mysql
exit
# 6.配置服务器内置防火墙
sudo ufw allow from remote_IP_address to any port 3306 # 使用该命令授权某一台(ip)服务器访问。
sudo ufw allow 3306 # 当然,你也可以允许任意计算机远程访问数据库。
# 7.远程连接测试
mysql -u username -h mysql_server_ip -p