安装
通过包管理工具apt安装,在ubuntu20.04下mysql版本默认为8.0,而ubuntu18.04在截至本文完成时默认版本为5.7。如果想在20.04下安装5.7版本,可以看这篇连接。
首先,更新软件包列表索引:
sudo apt update
安装MySQL:
sudo apt install mysql-server
查看MySQL版本:
mysql --version
由于本地系统为ubuntu20.04,MySql版本号为8.0。
查看服务状态,
service mysql status
状态正常,到此安装完毕!
配置
此时,mysql客户端已经作为服务器的依赖安装到本地,故可以通过命令行登录服务器。mysql8.0,root 用户默认通过 auth_socket
插件授权,而 auth_socket
插件通过 Unix socket 文件来验证所有连接到 localhost
的用户。这意味着你不能以用户–密码的方式,登录root账户。通过指令以root身份登录:
sudo mysql
但是,通过第三方程序是无法连接到数据库的,例如JDBC、pymysql等。可以通过修改mysql下的user表,配置密码方式以root身份登录:
use mysql;
select user, host, plugin from user;
将root对应的plugin由 auth_socket
改为 mysql_native_password
即使是mysql8.0也是,否则影响后续远程连接:
#MySQL8.0必须先执行此步骤设置密码,MySQL5.7可以选择先安装下面的secure!!!
alter user 'root'@'localhost' identified with mysql_native_password by '密码';
flush privileges;
exit;
至此,可以不用输入sudo
,通过密码的方式登录数据库:
mysql -uroot -p
增强数据库服务的安全性
执行:
sudo mysql_secure_installation
键入Enter后继续,
设置root用户密码,并反馈当前密码强度,询问是否确认密码:
询问三个问题,并根据提供的答案来设置系统的安全性。
- 是否关删除匿名测试用户的信息。
- 是否禁止远程root登录。只允许本地登录root用户,并拒绝远程连接。
- 是否删除
test
数据库。
根据自身需求键入相应的y
or n
。
最后输入 y
,重新加载特权表使上述配置生效。返回 All Done!
,设置成功。
远程连接
如何连接ubuntu服务器下的mysql数据库?
修改配置文件:
#MySQL8.0!!!
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
#MySQL5.7!!!
sudo vim /etc/my.cnf
注释下图标记行,解除地址绑定:
重启mysql服务:
sudo service mysql restart
登录mysql后执行:
use mysql;
update user set host='%' where user='root';
flush privileges;
#MySQL8.0执行这行
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
#MySQL5.7执行这行
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;
卸载
sudo apt purge mysql-* # mysql后用tab补全,把所有与mysql相关的卸载
sudo rm -rf /etc/mysql/ /var/lib/mysql
sudo apt autoremove
sudo apt autoclean
忘记密码(ERROR 1045)
修改配置文件,在[mysqld]后添加 skip-grant-tables
(登录时跳过权限检查):
#MySQL8.0!!!
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
#MySQL5.7!!!
sudo vim /etc/my.cnf
重启服务后可以无密码登录mysql:
sudo service mysql restart
mysql
mysql8.0
use mysql;
#必须先将authentication_string置为空!
update user set authentication_string='' where user='root';
flush privileges;
#设置新密码
ALTER user 'root'@'%' IDENTIFIED BY '新密码';
mysql5.7
use mysql;
update user set authentication_string = password('新密码') where user = 'root';
最后记得删除配置文件中的 skip-grant-tables
并重启服务,否则会影响远程连接!
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看密码策略:
SHOW VARIABLES LIKE 'validate_password%';
参照上图变量名修改策略:
set global validate_password.policy=0
set global validate_password.length=1;
最后修改密码:
alter user 'root'@'%' identified by 'root';
登录成功: