mysql5.7-ubuntu18.04 卸载/安装/配置/命令


文章目录

  • mysql5.7-ubuntu18.04 卸载/安装/配置/命令
  • 卸载mysql
  • 查看MySQL的依赖项
  • 卸载
  • 清除残留数据
  • 安装配置
  • 安装mysql
  • 检查状态
  • 日志文件
  • 基础配置
  • 密码验证组件
  • 密码与权限
  • 修改plugin
  • 配置远程访问
  • 导入导出目录
  • 库/表权限
  • 修改字符集
  • mysql语句
  • 库表操作
  • 建库表
  • 新建库表
  • 根据数据创建表
  • 删表
  • 删除
  • 清空
  • 改表
  • 修改表名
  • 查表
  • 查看表结构
  • 导入导出表
  • 导入
  • 导出
  • 列操作
  • 增加列
  • 删除列
  • 修改列名
  • 修改列属性
  • 修改列顺序
  • 数据操作
  • insert
  • 根据多个表insert
  • delete
  • update
  • 根据多个表update
  • select
  • 模糊查询
  • 根据多个表slelect
  • 排序
  • 统计


卸载mysql

查看MySQL的依赖项
dpkg --list|grep mysql
卸载
sudo apt-get remove mysql-common
sudo apt-get autoremove --purge mysql-server
清除残留数据
dpkg -l|grep ^rc|awk '{print$2}'|sudo xargs dpkg -P

安装配置

安装mysql
sudo apt-get update
sudo apt-get install mysql-server
检查状态
systemctl status mysql.service
日志文件
show global variables like '%general%';

基础配置

密码验证组件
sudo mysql_secure_installation
set global validate_password_policy=0;
密码与权限

默认密码在cat /etc/mysql/debian.cnf

update mysql.user set authentication_string=password('root') where user='root' ;
#或
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bapebape';

GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "123456";
flush privileges;
select Host, User,authentication_string,plugin from mysql.user;

grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;

权限1,权限2,…权限n代表:select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。

当数据库名称.表名称被*代替,表示赋予用户操作服务器上所有数据库所有表的权限。

用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%'表示从任何地址连接。

'连接口令’不能为空,否则创建失败。

修改plugin
update mysql.user set plugin="mysql_native_password" where user='root';

auth_socket 验证插件的使用场景
问题解决后,又仔细研究了一下 auth_socket 这个插件,发现这种验证方式有以下特点:

首先,这种验证方式不要求输入密码,即使输入了密码也不验证。这个特点让很多人觉得很不安全,实际仔细研究一下这种方式,发现还是相当安全的,因为它有另外两个限制;

只能用 UNIX 的 socket 方式登陆,这就保证了只能本地登陆,用户在使用这种登陆方式时已经通过了操作系统的安全验证;

操作系统的用户和 MySQL 数据库的用户名必须一致,例如你要登陆 MySQL 的 root 用户,必须用操作系统的 root 用户登陆。

配置远程访问

vi /etc/mysql/my.cnf

注释掉 bind-address= 127.0.0.1 就可以远程访问了。

导入导出目录
show variables like '%secure%';
库/表权限
grant all privileges on 库名.表名 to xx@"%" identified by "密码";`
修改字符集
vi /etc/mysql/mysql.conf.d/mysqld.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

mysql语句

库表操作

建库表
新建库表
create database database_name charset utf8mb4;
use database_name;
create table table_name(id text,ip text) charset utf8mb4;
根据数据创建表
create table table_name2 as select * from table_name1 where 1=2
删表
删除
`DROP TABLE 表名1,表名2,表名3...`
清空
TRUNCATE database/table 库/表名
改表
修改表名
alter table t_book rename to bbb;
查表
查看表结构
desc 表名;
导入导出表
导入
load data local infile '/var/lib/mysql-files/platon/a.txt' into table users;
导出
select * from table_name into outfile '/var/lib/mysql-files/file_name.xls';

列操作

增加列
alter table 表名 add column 列名 varchar(30) AFTER `某列`;
alter table 表名 add column 列名 varchar(30) first;
删除列
alter table 表名 drop column 列名;
修改列名
#MySQL:
alter table bbb change nnnnn hh int;

#SQLServer:
exec sp_rename't_student.name','nn','column';

#Oracle:
lter table bbb rename column nnnnn to hh int;
修改列属性
alter table t_book modify name varchar(22);
修改列顺序
alter table 表名 modify 列 first;
alter table 表名 modify 列 字段类型 after 列;
update 表 set 列=值 where nodeid=99;

数据操作

insert
insert into 表名 (字段1,字段2,...字段n) VALUES (值1,值2,...值n);
根据多个表insert
insert into table_name2 select * from table_name1;
delete
DELETE FROM table_1 WHERE cloumn=value;
update
update table_1 set column_1 = xxx where column_2 = xxx;
根据多个表update

根据条件把表2数据更新至表1

update table_1 t1,table_2 t2 set t1.column = t2.column where t1.id = t2.pid;

嵌套语句

UPDATE
     table_a ta,(SELECT tb_value1,tb_value2 FROM table_b WHERE tb_value3 = 'value3') tb
	SET ta.ta_value1 = tb.tb_value1 
	WHERE ta.ta_value2 = tb.tb_value2;
select
select * from table_1 where cloumn_1=value_1 and cloumn_2=value2;
模糊查询

%匹配单个字符

select * from table_1 where cloumn_1 like %value_1%;
根据多个表slelect
select ip from table_1 A where A.id not in (select id from table_2);

排序

单列排序

SELECT * FROM test1 ORDER BY date_time

统计

频数频率统计

SELECT 
 COALESCE(a.city,'total') AS 'city',
 COUNT(a.city) AS 'count(city)',
 COUNT(a.city)/(SELECT count(*) FROM nodeip)*100 AS '%(city)'
FROM 
 nodeip AS a 
GROUP BY 
 a.city
ORDER BY 
 count(city);