MySQL5.7安装配置与基本操作


安装(https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/)
yum install -y https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm yum-config-manager
yum repolist all | grep mysql
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
yum repolist enabled | grep mysql
yum install -y mysql-community-server
启动与登陆
service mysqld start
systemctl enable mysqld
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!@';
配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
lower-case-table-names=0
max-connections=5000
max-connect-errors = 5000
sql-mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
wait-timeout = 1814400
interactive-timeout = 1814400

open-files-limit=65535 
innodb-buffer-pool-size=2G 
max-allowed-packet=500M

查询
show variables like "%connections%";



md5-6195c63ef04972625a430fd2657dc2df



设置简单密码需要修改两个全局参数:
mysql> 
set global validate_password_policy=0;
set global validate_password_length=1;
SET PASSWORD = PASSWORD('123456');   #localhost登录root密码
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'adminFG1@3';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.%' IDENTIFIED BY "Blizzmi.1test";    #192.168.%登录root密码



md5-bb538f44a99cd37fdceaeb4f0b0d296d



set global validate_password_policy=0;
set global validate_password_length=1;
CREATE DATABASE `im` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON `im`.* TO 'im'@'127.0.0.1' IDENTIFIED BY 'fungaming';

CREATE DATABASE `DB` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON `DB`.* TO 'USER'@'192.168.%' IDENTIFIED BY 'PASSWD';



md5-00f7c5a59472ac84fbf6f22a54900281



mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
mysql> SELECT DISTINCT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') AS query FROM mysql.user;   (方便查询权限)



md5-95e6ba9c5cce07a36a2704ceda837172



mysql>show grants;
mysql> show grants for 'root'@'localhost';
mysql> select * from mysql.user where user='root' \\G



md5-f9544baf434435edfe679235c85fa16f



删除某用户的登陆权限
mysql> DELETE FROM mysql.user WHERE User="root" and Host="%"
flush privileges;
删除用户某操作权限:
revoke all on `ivg_flatform`.* from 'dev'@'%';
flush privileges;



md5-c2f33426f70eec2058f595364e4d8a15



GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
//创建用户并赋予root权限,WITH GRANT OPTION 就是具有将权限传递给第三方的权利.表示'monry'可以将'ALL PRIVILEGES'赋予其它用户

GRANT USAGE ON *.* TO 'dummy'@'localhost' identified by '密码';
//创建用户赋予登陆权限
GRANT SELECT ON `ivg_flatform`.* TO 'dev'@'%';
//赋予某库select权限
GRANT ALL PRIVILEGES ON `ivg_flatform`.* TO 'dev'@'%';
//赋予某库全部权限

例如:GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.210' IDENTIFIED BY 'ivgivgivg'

CREATE DATABASE `announce` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON `announce`.* TO 'announce_dev'@'%' IDENTIFIED BY 'dbksq7zn';

CREATE DATABASE `account_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `ad_analyze` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `gm` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `ivg_flatform` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON `account_db`.* TO 'account_server'@'%' IDENTIFIED BY 'dwqzrpsn';
GRANT ALL PRIVILEGES ON `ad_analyze`.* TO 'ad_analyze_dev'@'%' IDENTIFIED BY 'fuqodnfv';
GRANT ALL PRIVILEGES ON `gm`.* TO 'gm_dev'@'%' IDENTIFIED BY 'dyevaksv';
GRANT ALL PRIVILEGES ON `ivg_flatform`.* TO 'flatform'@'%' IDENTIFIED BY 'rbflspqn';



md5-5cf1d94a5d84de74da4390cf5392be75



MySQL开启general_log跟踪数据执行过程 (增加mysql日志记录登陆等所有操作)
mysql>set global general_log_file='/tmp/general.log'; 
# 开启general log模式
mysql>set global general_log=on; 
# 关闭general log模式
mysql>set global general_log=off;
查询
show global variables like "%genera%";
永久修改:添加到my.cnf中(重启mysql生效)
general_log=1
general_log_file='/tmp/general.log';

开启二进制日志
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 0
max_binlog_size         = 1000M
开启慢查询 (5.6)
slow_query_log  = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes = 1
检查:mysqldumpslow -s r -t 10 /var/log/mysql/mysql-slow.log

错误日志
log_error = /var/log/mysql/error.log



md5-5d516a00ace6ba4aea731d829cfaf9cf



1、、创建数据库
命令:create database <数据库名>
例如:建立一个名为xhkdb的数据库
mysql> create database xhkdb;
mysql>  CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql>  CREATE DATABASE `ipms` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;
2、显示所有的数据库
命令:show databases (注意:最后有个s)
mysql> show databases;
3、删除数据库
命令:drop database <数据库名>
例如:删除名为 xhkdb的数据库
mysql> drop database xhkdb;
4、连接数据库
命令: use <数据库名>
例如:如果xhkdb数据库存在,尝试存取它:
mysql> use xhkdb;
屏幕提示:Database changed
5、当前选择(连接)的数据库
mysql> select database();
6、当前数据库包含的表信息:
mysql> show tables; (注意:最后有个s)
7.列出mysql当前连接在执行的sql语句
show full processlist



md5-059d9f8627c6905f59adbb4fd8fc33f4



1、建表
命令:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);
例如,建立一个名为MyClass的表,

mysql> create table MyClass(
 id int(4) not null primary key auto_increment,
 name char(20) not null,
 sex int(4) not null default '0',
 degree double(16,2));
2、获取表结构
命令: desc 表名,或者show columns from 表名
mysql> desc MyClass;
mysql> show columns from MyClass;
3、删除表
命令:drop table <表名>
例如:删除表名为MyClass 的表
mysql> drop table MyClass;
4、插入数据
命令:insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 值1 )[, ( 值n )]
例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99, 编号为3 的名为Wang 的成绩为96.5.
mysql> insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);
5、查询表中的数据
1)、查询所有行
命令: select <字段1,字段2,...> from < 表名 > where < 表达式 >
例如:查看表MyClass 中所有数据
mysql> select * from MyClass;
2)、查询前几行数据
例如:查看表MyClass 中前2行数据
mysql> select * from MyClass order by id limit 0,2;
6、删除表中数据
命令:delete from 表名 where 表达式
例如:删除表MyClass中编号为1 的记录
mysql> delete from MyClass where id=1;
7、修改表中数据:update 表名 set 字段=新值,… where 条件
mysql> update MyClass set name='Mary' where id=1;
7、在表中增加字段:
命令:alter table 表名 add字段类型 其他;
例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0
mysql> alter table MyClass add passtest int(4) default '0'
8、更改表名:
命令:rename table 原表名 to 新表名;
例如:在表MyClass名字更改为YouClass
mysql> rename table MyClass to YouClass;
9、字段类型
1.INT[(M)] 型: 正常大小整数类型
2.DOUBLE[(M,D)] [ZEROFILL] 型: 正常大小(双精密)浮点数字类型
3.DATE 日期类型:支持的范围是1000-01-01到9999-12-31。MySQL以YYYY-MM-DD格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列
4.CHAR(M) 型:定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
5.BLOB TEXT类型,最大长度为65535(2^16-1)个字符。
6.VARCHAR型:变长字符串类型



md5-f9544baf434435edfe679235c85fa16f



1.连接数据库
格式:mysql [-h host_name][-u user_name][-p password]
参数说明:
    [-h host_name]:数据库主机的地址(主机名或ip地址),默认localhost.
    [-u user_name]:登录unix/linux的用户名,当指定一个不存在的用户名时,mysql视其为guest用户,使用guest用户不需要口令.
    [-p password]:mysql用户登录的密码,系统初始root密码为空.
    注意:mysql的user和linux下的user相互独立,互不影响,一般linux用户最多8个字符,mysql最多16个。同时,mysql有自己的口令加密系统。
2.修改密码:
   ⑴mysql>use mysql;
      mysql>update user set password=password('new_password') where user='用户名';
      mysql>flush privileges;
      注意:使用flush privileges命令使密码生效。
   ⑵mysql>set password [for user]=password('new_password');
      [for user]为空,默认更改当前用户的密码;
3.删除匿名用户
      mysql>use mysql;
      mysql>delete from user where user='';
      mysql>flush privileges;
4.创建用户
      mysql>use database_name;
      mysql>grant all privileges on database_name.* to 用户名@localhost identified by '密码';
      mysql>flush privileges;
      说明:创建用户名,同时赋予该用户名可以访问database_name数据库中所有表。
      注意:使用grant为一个不存在的用户授予某些权限时,mysql会首先自动创建给用户。
5.创建用户(不指定库)
      mysql>use database_name;
      mysql>insert into mysql.user(Host,User,Password) values("localhost","用户名",password("1234"));
      mysql>flush privileges;
6.给用户分配最小权限
       mysql>grant select on 数据库名.表名 to 用户名@localhost
      mysql>identified by '用户名';
      说明:该用户只对指定数据库中指定表的select权限。
7.msyql的数据备份
      ⑴备份数据库
          mysqldump -add-locks 数据库名>数据库名.sql
      ⑵恢复数据库
          drop database 数据库名;
          create database 数据库名;
          mysql 数据库名<数据库名.sql;
      ⑶备份数据库中表
          mysqldump -add-locks 数据库名 表名>表名.sql
      ⑷恢复数据库中的表
          mysql 数据库名<表名.sql