一:mysql用户管理
安全起见,msyql的root用户默认是 不允许远程登录使用。
1.1:查看所有的用户
mysql> select user,host,password from mysql.user;
+------+-----------------------+-------------------------------------------+
| user | host | password |
+------+-----------------------+-------------------------------------------+
| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| root | localhost.localdomain | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | localhost.localdomain | |
+------+-----------------------+-------------------------------------------+
6 rows in set (0.00 sec)
1.2:新增用户
create user 用户名@'地址' identified by'密码';
举例:
mysql> create user huazai@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)
1.3:密码的修改
1.3.1:方法一
update user set password=password('新密码') where host='主地址' and user='用户名';
flush privileges;//刷新权限
举例:
mysql> update user set password=password('123456') where user='huazai';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
刷新授权表
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
1.3.2:方法二
set password for 用户名@'主机地址' =password('新密码'); //注这种方法无需刷新权限
举例:
mysql> set password for huazai@'localhost'=password('123');
Query OK, 0 rows affected (0.00 sec)
1.4:忘记root密码后的恢复
-
先将mysql服务停止
systemctl stop mariadb
-
跳过授权表,启动MySQL服务
这一步主要利用mysqld的 --skip-grant-tables选项
修改my.cnf配置,添加 skip_grant_tables=1启动设置:打开/etc/my.cnf配置文件
添加skip_grant_tables 一行,然后保存退出[root@localhost mysql]# cat my.cnf |grep skip skip_grant_tables=1
-
重设root的密码
mysql> update mysql.user set password=password('123') where user='root'; Query OK, 3 rows affected (0.01 sec) Rows matched: 4 Changed: 3 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
1.5:数据库用户的权限设置
1.5.1: 权限层级
权限可以分为四个层级:
- 全局级别(*.*)
- 数据库级别(数据库名.*)
- 表级别(数据库名.表名)
- 列级别( 权限(列) 数据库名.表名)。
全局级别的权限存放在mysql.user表中
数据库级别的权限存放在mysql.db或者mysql.host
表级别的权限存放在mysql.tables_priv中
列级别的权限存放在mysql.columns_priv中。
1.5.2: 为用户授权
grant 权限列表 on 数据库名.表名 to 用户@'地址';
1.5.3:授权的同时创建用户
grant 权限列表 on 数据库名.表名 to 用户@'地址' identified by'密码';
mysql> grant select on mysql.* to 'huazai007'@'192.168.1.%' identified by '123';
Query OK, 0 rows affected (0.03 sec)
1.5.4:收回权限
查看用户的权限:
show grants for 用户名;
mysql> show grants for 'huazai007'@'192.168.1.%';
+--------------------------------------------------------------------------------------------------------------------+
| Grants for huazai007@192.168.1.% |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'huazai007'@'192.168.1.%' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |
| GRANT SELECT ON `mysql`.* TO 'huazai007'@'192.168.1.%' |
+--------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
收回用户的权限:
revoke 权限列表 on 数据库名.表名 from 用户@'地址';
mysql> revoke select on mysql.* from 'huazai007'@'192.168.1.%';
Query OK, 0 rows affected (0.01 sec)
二:mysql数据库的备份与恢复
2.1:备份的概念与分类
2.1.1:备份概念
为应付文件、数据丢失或损坏等可能出现的意外情况,将电子计算机存储设备中的数据复制到磁带等大容量存储设备中,从而在原文中独立出来单独贮存的程序或文件副本;。
如果系统的硬件或存储媒体发生故障,“备份”可以帮助我们保护数据免受意外的损失。
2.1.2:备份分类
- 全量备份:
完全备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝 - 增量备份:
增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加和者被修改的文件 - 差异备份:
差异备份是指在一次全备份后到进行差异备份的这段时间内,对那些增加或者修改文件的备份
2.2:备份工具
2.2.1:mysqldump
mysqldump是mysql自带的一个备份工具,完成的是全量备份
举例:备份所有数据库
mysqldump -uroot –p密码 --all-databases>盘符:\路径\文件名.sql
-A 等同于 --all-databases
/usr/local/mysql/bin/mysqldump -uroot -p123 -A -S /var/lib/mysql/mysql.sock > /tmp/all_db.sql
举例:备份某个(某些)指定的数据库(test+mysql)
mysqldump -uroot –p密码 --databases 数据库名>盘符:\路径\文件名.sql
-B 等同于–databases
[root@localhost mysql]# /usr/local/mysql/bin/mysqldump -uroot -p123 --databases test mysql -S /var/lib/mysql/mysql.sock > /tmp/test_mysql.sql
Warning: Using a password on the command line interface can be insecure.
举例: 备份指定数据库的某个表(mysql.user)
mysqldump -uroot –p密码 数据库名 表名>盘符:\路径\文件名.sql
[root@localhost mysql]# /usr/local/mysql/bin/mysqldump -uroot -p123 mysql user -S /var/lib/mysql/mysql.sock > /tmp/mysql_user.sql
Warning: Using a password on the command line interface can be insecure.
2.2.2:mydumper
Mydumper是一个针对MySQL高性能多线程备份和恢复工具。
2.2.2.1:Mydumper主要特性:
- 轻量级C语言写的
- 执行速度比mysqldump快10倍
- 快速的文件压缩
- 支持导出binlog
- 多线程恢复(适用于0.2.1以上版本)
- 以守护进程的工作方式,定时快照和连续二进制日志(适用于0.5.0以上版本)
- 开源 (GNU GPLv3)
2.2.2.2:Mydumper安装:
下载:
wget https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-2.el7.x86_64.rpm
yum -y install glib2-devel zlib-devel pcre-devel
yum -y install mydumper-0.9.5-2.el7.x86_64.rpm
版本查看:
[root@localhost mysql]# mydumper -V
mydumper 0.9.5, built against MySQL 5.7.21-21
2.2.2.3:mydumper参数说明
-B, --database 需要备份的库
-T, --tables-list 需要备份的表,多表,用逗号分隔
-o, --outputdir 输出文件的目录
-s, --statement-size 生成插入语句的字节数, 默认 1000000
-r, --rows 分裂成很多行块表
-c, --compress 压缩输出文件
-e, --build-empty-files 即使表没有数据,还是产生一个空文件
-x, --regex 正则表达式: ‘db.table’
-i, --ignore-engines 忽略的存储引擎,用逗号分隔
-m, --no-schemas 不导出表结构
-k, --no-locks 不执行共享读锁 警告:这将导致不一致的备份
-l, --long-query-guard 设置长查询时间,默认60秒
–kill-long-queries kill掉长时间执行的查询
-b, --binlogs 导出binlog
-D, --daemon 启用守护进程模式
-I, --snapshot-interval dump快照间隔时间,默认60s,需要在daemon模式下
-L, --logfile 日志文件
-h, --host The host to connect to
-u, --user Username with privileges to run the dump
-p, --password User password
-P, --port TCP/IP port to connect to
-S, --socket UNIX domain socket file to use for connection
-t, --threads 使用的线程数,默认4
-C, --compress-protocol 在mysql连接上使用压缩协议
-V, --version Show the program version and exit
-v, --verbose 更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
2.2.2.4:mydumper用例
默认用4个线程导数,一般企业服务器建议8以上,非事务引擎会锁表,建议用slave导出,使用压缩
注意:参数后有空格 -u xx
备份全库
mydumper -u root -p ‘xxx’ -h xxx -o /xxx/gw
(备份目录会自动创建!)
备份表,不备份表结构
mydumper -u root -p ‘xxx’ -h xxx -B gw -T testA -m -o /xxx/gw
备份指定数据库
mydumper -u root -p ‘xxx’ -h xxx -B gw -t 6 -o /xxx/gw
备份多张表(tableA,tableB)
mydumper -u root -p ‘xxx’ -h xxx -B gw -T testA,testB -t 6 -o /xxx/gw
备份tableA表的数据,并进行压缩
mydumper -u root -p ‘xxx’ -h xxx -B gw -T testA -t 6 -c -o /xxx/gw
mydumper数据恢复:
myloader -u root -p ‘xxxxx’ -B test -d /home/mysql/
2.2.3:[xtrabackup](了解)
2.2.4: 数据恢复
方法一:
mysql -u root –p密码 库或表 < 备份文件
方法二:
或者登录mysql
source 备份盘符:\路径\文件名.sql
方法三:
mydumper:将数据导出
myloader:恢复数据
myloader -u root -p ‘xxxxx’ -B test -d /home/mysql/
三:mysql日志管理
3.1:日志类型
3.1.1:错误日志:
记录启动、运行或停止mysqld时出现的问题。
3.1.2:二进制日志:
该日志文件会以二进制形式记录数据库的各种操作,但是不记录查询语句。
数据库的主从复制也是基于binlog进行同步数据。
3.1.2.1:查看二进制日志是否开启:
show variables like 'log%';
3.1.2.2:获取当前二进制日志列表:
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 69459 |
| mysql-bin.000002 | 1377550 |
| mysql-bin.000003 | 143 |
| mysql-bin.000004 | 9796 |
| mysql-bin.000005 | 916 |
+------------------+-----------+
5 rows in set (0.00 sec)
3.1.2.3:查看正在使用哪一个日志:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 916 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
3.1.2.4:查看二进制文件内容:(mysqlbinlog工具)
mysqlbinlog命令的常用选项:
–start-postion 开始位置
–stop-postion 结束位置
–start-datetime ‘yyyy-mm-dd hh:mm:ss’ 开始时间
–stop-datetime ‘yyyy-mm-dd hh:mm:ss’ 结束时间
mysqlbinlog --no-defaults --start-position=106 --stop-position=272 /var/lib/mysql/mysql-bin.000001
[root@localhost ~]# mysqlbinlog --start-datetime='2020-10-08 21:10:38' --stop-datetime='2020-10-08 21:20:01' /data/mysql/mysql-bin.000005
3.1.2.5:使用二进制日志还原数据:
在备份mysql数据库时,将相关的二进制日志备份进行备份就是mysql的增量备份,恢复时可以二进制日志进行增量恢复。
3.1.2.5.1:通过时间还原
实验过程:
1:先插入一条数据
2: 在删除这条数据
3:找到输入数据的pos起止位置参数,进行数据恢复!
mysqlbinlog --start-datetime=“时间” 日志文件路径 | mysql -u用户 -p //指定开始恢复的时间节点
mysqlbinlog --stop-datetime=“时间” 日志文件路径 | mysql -u用户 -p //指定结束恢复的时间节点
mysqlbinlog --start-datetime=“时间” --stop-datetime=“时间” 日志文件路径 | mysql -u用户 -p //从规定的起始时间还原到规定的结束时间
3.1.2.5.2:通过位置还原
mysqlbinlog --start-position=“位置” 日志文件路径 | mysql -u 用户 -p //从规定的起始位置还原到现在
mysqlbinlog --stop-position=“位置” 日志文件路径 | mysql -u 用户 -p //从最开始还原到规定的结束位置
mysqlbinlog --start-position=“位置” --stop-position=“位置” 日 志文件路径 | mysql -u用户 -p //从规定的起始位置还原到规定的结束位置
3.1.3:慢查询日志(了解)
slow_log
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
long_query_time的默认值为10,意思是运行10S以上的语句。
默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数。
当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。