MySQL是最流行的开源关系数据库管理系统。它速度快,容易使用,容易扩展,并且流行的LAMP
和LEMP
的一部分。
这篇指南讲解了如何在 Ubuntu 20.04上安装和保护 MySQL。
环境
Ubuntu 20.04
MySQL 8
安装
- 登录到远程服务器
- 执行安装命令
sudo apt update
sudo apt install mysql-server
- 安装完成,MySQL 服务会自动启动,验证 MySQL 服务器正在运行
sudo systemctl status mysql
保护加固
- 运行指令
sudo mysql_secure_installation
- 配置
VALIDATE PASSWORD PLUGIN
,用来测试 MySQL 用户密码的强度,有三个级别的密码验证策略,接下来的操作都选 y
登录
在MySQL 8 上,root 用户默认通过auth_socket
插件授权。
auth_socket
插件通过 Unix socket 文件来验证所有连接到localhost
的用户。这意味着你不能通过提供密码,验证为 root。
- 以root用户身份登录
sudo mysql
如果你想以 root 身份登录 MySQL 服务器,使用其他的程序,例如 phpMyAdmin,你有两个选择。
第一个就是将验证方法从auth_socket
修改成mysql_native_password
。你可以通过运行下面的命令实现:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'very_strong_password';
FLUSH PRIVILEGES;
第二个选项,推荐的选项,就是创建一个新的独立管理用户,拥有所有数据库的访问权限:
GRANT ALL PRIVILEGES ON *.* TO 'administrator'@'localhost' IDENTIFIED BY 'very_strong_password';
至此,你可以远程服务器进行连接 MySQL
远程连接
如果你想在本地连接安装在远程服务器的 MySQL,需注意以下几点:
- 修改 远程服务器 MySQL root 用户的host 为 %,登录MySQL 后 执行
use mysql;
,然后查看root用户的host selcet user,host from user;
,如果 user 的 host 不是 %,执行
update user set Host = '%' where user = 'root';
flush privileges; // 更新权限
注:host 为 % 表示所有 ip 都有连接权限
- 查看 etc/mysql/my.cnf 文件
bind-address = 127.0.0.1
如果有,注释掉,不然只能监听 本机地址
- 服务器上放行 3306
- 本地使用 Navicat 连接远程服务器上的 MySQL
MySQL 基础使用命令
连接
mysql -h主机地址 -u用户名 -p密码 // 连接 MySQL
mysql> exit/quit; // 退出 MySQL
修改密码
root密码为空时,设置root密码:
mysql> mysqladmin -uroot newpassword; -- 因为开始时root没有密码,所以-p旧密码 可以省略
使用 sqladmin 命令修改密码:
mysql> mysqladmin -uroot -p123456 password 12345678;
使用set passsword命令修改密码:
mysql> set password for 用户名@localhost = password('新密码');
忘记root密码情况下:
mysqld --skip-grant-tables
mysql> use mysql; --连接权限数据库
mysql> update user set password=password("新密码") where user="root"; -- 改密码
mysql> flush privileges; -- 刷新权限
mysql> quit; -- 退出mysql
使用
创建数据库:
mysql> create database db_name; -- 创建数据库
mysql> show databases; -- 显示所有的数据库
mysql> drop database db_name; -- 删除数据库
mysql> use db_name; -- 选择数据库
mysql> create table tb_name (字段名 varchar(20), 字段名 char(1)); -- 创建数据表模板
mysql> show tables; -- 显示数据表
mysql> desc tb_name; -- 显示表结构
mysql> drop table tb_name; -- 删除表
插入数据:
/*第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:*/
mysql> insert into tb_name values (value1,value2,value3,...);
/*第二种形式需要指定列名及被插入的值:*/
mysql> insert into tb_name (column1,column2,column3,...) values (value1,value2,value3,...);
查询数据: