mysql安全机制、日志管理、数据备份、权限

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40195432/article/details/84934839

安全机制:

MySQL用户管理
登录和退出MySQL
示例:
mysql -h192.168.5.240 -P 3306 -u root -p123 -P指端口号
mysql -e ‘select user,host from user’ 非交互式操作,即不用密码登录
-h 指定主机名
-P MySQL服务器端口
-u 指定用户名
-p 指定登录密码
此处mysql为指定登录的数据库
-e 接SQL语句

创建用户
方法一:CREATE USER 语句创建
CREATE USER user1@’localhost’ IDENTIFIED BY ‘123456’;

方法二: GRANT语句创建 *.*表示哪个库的哪个表,或者哪个表的哪个字段等
GRANT SELECT ON . TO user3@‘localhost’ IDENTIFIED BY ‘123456’;
*.*表全部库全部表,test.*表示test库下的所有表
GRANT all ON . TO root@‘192.168.1.252’ IDENTIFIED BY ‘123456’;
FLUSH PRIVILEGES; 创建一个用户允许在192.168.1.252这台主机上登录并进行所有的事情

删除用户
DROP USER语句删除
DROP USER user1@’localhost’;

修改用户密码
===root修改自己密码
方法一:
mysqladmin -u root -p password “newpasswd” 输入旧密码

方法二:
update mysql.user set password=password(‘123456’) where user=‘root’ and host=‘localhost’;
FLUSH PRIVILEGES; 刷新权限

==root修改其他用户密码
方法一:
SET PASSWORD FOR user3@’localhost’=password(‘new_password’);
FLUSH PRIVILEGES;

方法二:
UPDATE mysql.user SET password=password(‘new_password’) WHERE user=’user3’ AND host=’localhost’;
FLUSH PRIVILEGES;

方法三:
GRANT SELECT ON . TO user3@’localhost’ IDENTIFIED BY ‘tianyun’;
FLUSH PRIVILEGES;

===普通用户修改自己密码
方法一:
先登入mysql
SET password=password(‘new_password’);

方法二:
# mysqladmin -uzhuzhu -p123 password 'new_password'	    //123为旧密码

===丢失或忘记root用户密码

# vim /etc/my.cnf
[mysqld]
skip-grant-tables   加入此行
# service mysqld restart   重启服务
# mysql -uroot     进入mysql
mysql> UPDATE mysql.user SET password=password('123456') WHERE user='root' AND host='localhost';    修改密码
mysql> FLUSH PRIVILEGES;    刷新权限

MySQL 赋予用户权限命令语法为:
grant 权限 on 数据库对象 to 用户;
grant 权限 on 数据库对象 to 用户 identified by “密码”;
grant 权限 on 数据库对象 to 用户@“ip” identified by “密码”

GRANT 语法:
GRANT privileges (columns)  ON what  TO user IDENTIFIED BY “password”  WITH GRANT OPTION;  (表示该用户可以为其他用户分配权限)
privileges 列表:

  • ALTER: 修改表和索引。
  • CREATE: 创建数据库和表。
  • DELETE: 删除表中已有的记录。
  • DROP: 抛弃(删除)数据库和表。
  • INDEX: 创建或抛弃索引。
  • INSERT: 向表中插入新行。
  • REFERENCE:未使用。
  • SELECT: 检索表中的记录。
  • UPDATE: 修改现存表记录。
  • FILE: 读或写服务器上的文件。
  • PROCESS: 查看服务器中执行的线程信息或杀死线程。
  • RELOAD: 重载授权表或清空日志、主机缓存或表缓存。
  • SHUTDOWN: 关闭服务器。
  • ALL: 所有权限,ALL PRIVILEGES同义词。
  • USAGE: 特殊的 “无权限” 权限。

Grant示例:
GRANT ALL ON . TO admin1@’%’ IDENTIFIED BY ‘tianyun’;

GRANT ALL ON *.* TO admin2@'%' IDENTIFIED BY 'tianyun' WITH GRANT OPTION;

GRANT ALL ON bbs.* TO admin3@'%' IDENTIFIED BY 'tianyun';

GRANT ALL ON bbs.user TO admin4@'%' IDENTIFIED BY 'tianyun';

GRANT SELECT(col1),INSERT(col2,col3) ON bbs.user TO admin5@'%' IDENTIFIED BY 'tianyun';

查看权限
SHOW GRANTS\G
SHOW GRANTS FOR admin1@’%’\G

回收权限REVOKE
语法:
REVOKE 权限列表 ON 数据库名 FROM 用户名@‘客户端主机’

示例:
REVOKE DELETE ON *.*  FROM admin1@’%’;			                                //回收部分权限
REVOKE ALL PRIVILEGES  ON *.*  FROM admin2@’%’;  		                    //回收所有权限

================================================================================================
日志管理:

错误日志: 记录 MySQL 服务器启动、关闭及运行错误等信息
二进制日志: 又称binlog日志,以二进制文件的方式记录数据库中除 SELECT 以外的操作
查询日志: 记录查询的信息
慢查询日志: 记录执行时间超过指定时间的操作
中继日志: 备库将主库的二进制日志复制到自己的中继日志中,从而在本地进行重放
通用日志: 审计哪个账号、在哪个时段、做了哪些事件
事务日志 或称redo日志,记录Innodb事务相关的如事务执行时间、检查点等

一、bin-log 二进制文件

  1. 启用

vim /etc/my.cnf

[mysqld]
log-bin[=dir/[filename]] //目录权限必须mysql用户可写

service mysqld restart

vim /etc/my.cnf

[mysqld]
log-bin[=dir/[filename]] //目录权限必须mysql用户可写
log-bin=/usr/local/mysql/data/mysqld.binlog

service mysqld restart

2、 查看
查看全部:

mysqlbinlog mysql.000002

按时间:

mysqlbinlog mysql.000002 --start-datetime=“2012-12-05 10:02:56” --stop-datetime=“2012-12-05 11:02:54”

按字节数:

mysqlbinlog mysql.000002 --start-position=260 --stop-position=930

  1. 截断bin-log(产生新的bin-log文件)
    a. 重启mysql服务器
    b. # mysql -uroot -p123 -e ‘flush logs’ 刷新

二、查询日志
启用通用查询日志

vim /etc/my.cnf

[mysqld]
log[=dir[filename]]

service mysqld restart

vim /etc/my.cnf

[mysqld]
general_log = on 启用查询日志
general_log_file=/tmp/mysql.log 查询日志路径

service mysqld restart

三、慢查询日志
启用慢查询日志

vim /etc/my.cnf

[mysqld]
slow-query-log=1
slow-query-log-file=slow.log 位置
long_query_time=3

service mysqld restart

================================================================================================
数据备份:

逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。
mysqldump
mydumper :效率高些,支持多线程

物理备份: 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到异构系统中如Windows。
xtrabackup
inbackup 备份引擎
lvm snapshot 快照

建议:
# vim /etc/my.cnf
[mysqld]
log-bin
datadir = /usr/local/mysql/data  #添加此行,数据存放目录
innodb_file_per_table = 1         #启用InnoDB独立表空间,默认所有数据库使用一个表空间
# service mysqld restart

使用mysqldump实现逻辑备份
语法:

mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql

关于数据库名:
-A, --all-databases 所有库
school 数据库名
school stu_info t1 school数据库的表stu_info、t1
-d 备份数据库的所有数据结构 不备份数据
-B, --databases bbs test mysql 多个数据库 备份表结构和数据库结构 不加此项需要先创建数据库再恢复
–single-transaction     #基于此项可以实现对InnoDB表做热备份
-R, --routines             #备份存储过程和存储函数
–triggers                #备份触发器
–master-data=2        #备库,该选项将会记录binlog的日志位置与文件名并追加到文件中,如果为1将会输出CHANGE MASTER命令,主从下有用
–add-drop-table 还能够让该备份覆盖已有数据库而不需要手动删除原有数据库。

恢复备份:
恢复
[root@tianyun ~]# mysql -uroot -p888 school < /tmp/school_2015-09-14-15-40.sql
root@tianyun tmp]> source /tmp/school_2015-09-14-15-40.sql


mysqldump

1、备份恢复单个数据库
备份:
mydqldump -u 用户 –p’密码’ –default-character-set=Iatin1 数据库名 [|gzip] > 备份文件名(数据库默认字符集为Iatin1)

 示例:备份school数据库
 mysqldump -uroot -p'123' --default-character-set=gbk -B school > /tmp/school.$(date +%F).sql

注意:-B 作用:创建数据库和切换到数据库,恢复时不用创建数据库和删表。

备份多个库,-B 数据库1 数据库2 ...

恢复:
1)MySQL中用source命令
删除:mysql -uroot -p -e ‘drop database school;’
查看:mysql -uroot -p -e ‘show databases;’ | grep school
恢复:mysql> source /tmp/school.2015-11-17.sql;
查看: mysql -uroot -p -e ‘select * from school.Books;’
2)mysql命令恢复
删除:mysql -uroot -p -e ‘drop database school;’
查看:mysql -uroot -p -e ‘show databases;’ | grep school
恢复:mysql -uroot -p < /tmp/school.2015-11-17.sql
查看: mysql -uroot -p -e ‘select * from school.Books;’

2、备份恢复单个表
备份:
mysqldump -u 用户名 -p 数据库名 表名 > 备份的文件名
示例:
mysqldump -uroot -p school Books > /tmp/Books.$(date +%F).sql
恢复:
mysql -uroot -p -e ‘drop table school.Books;’
mysql -uroot -p -e ‘use school;show tables;’ | grep Books
mysql -uroot -p school < /tmp/Books.2015-11-17.sql
mysql -uroot -p -e ‘select * from school.Books;’
备份多个表:
mysqldump -u 用户名 -p 数据库名 表名1 表名2 > 备份的文件名

    mysqldump  -uroot -p123456  test2 user2  > /home/user2.sql 		备份指定数据库的指定表  
	mysql -u root -p123456         test2 < /home/user2.sql                还原备份的表到指定数据库中
	
	
	使用source 命令导入sql数据:
	mysql导入数据库 常用source 命令 
	进入mysql数据库控制台, 如mysql -u root -p   
	mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:\wcnc_db.sql

猜你喜欢

转载自blog.csdn.net/qq_40195432/article/details/84934839