MySQL是最流行的开源关系数据库管理系统。它速度快,容易使用,容易扩展,并且流行的LAMPLEMP的一部分。

这篇指南讲解了如何在 Ubuntu 20.04上安装和保护 MySQL。

环境

Ubuntu 20.04

MySQL 8

安装

  1. 登录到远程服务器
  2. 执行安装命令
sudo apt update
sudo apt install mysql-server



  1. 安装完成,MySQL 服务会自动启动,验证 MySQL 服务器正在运行
sudo systemctl status mysql



保护加固

  1. 运行指令
sudo mysql_secure_installation



  1. 配置VALIDATE PASSWORD PLUGIN,用来测试 MySQL 用户密码的强度,有三个级别的密码验证策略,接下来的操作都选 y

登录

在MySQL 8 上,root 用户默认通过auth_socket插件授权。

auth_socket插件通过 Unix socket 文件来验证所有连接到localhost的用户。这意味着你不能通过提供密码,验证为 root。

  1. 以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,需注意以下几点:

  1. 修改 远程服务器 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 都有连接权限

  1. 查看 etc/mysql/my.cnf 文件
bind-address           = 127.0.0.1



如果有,注释掉,不然只能监听 本机地址

  1. 服务器上放行 3306
  2. 本地使用 Navicat 连接远程服务器上的 MySQL




mysql 跨ip关联查询数据库_mysql允许root远程连接


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,...);


查询数据:

select <目标列表达式列表>

[into 新表名]

from 表名或视图名

[where <条件>]

[[group by <分组表达式>]

[having <条件>]

[order by <排序表达式>[ASC|DESC]]