本文主要讲述了MySQL的恢复、日志、备份以及关于用户的授权操作。
3.3恢复、日志、备份
动态转储 | 静态转储 | |
海量转储 | 动态海量转储 | 静态海量转储 |
增量转储 | 动态增量转储 | 静态增量转储 |
- 逻辑备份工具:mysqldump
- 物理备份工具:mysqlbackup(仅限商用版)
- 日志工具:mysqlbinlog
- 还原工具:mysql
- 管理工具:mysqladmin
3.3.1逻辑备份 - mysqldump
mysqldump -h127.0.0.1 -uroot -p123123 [options] --databases db_name1 db_name2
--databases 参数用指定数据库名,后面可跟一个或多个数据库的名字,多个数据库名间用空格隔开。
--all-databases 导出所有数据库
--tables参数代表要导出多个数据表;
--flush-logs 刷MySQL日志,即重新开始一个日志文件。
-p和密码之间没有空格
mysqldump -unew-user1 -p123123 db1 --tables tb1 tb2> tb1tb2.sql
3.3.2还原 - mysql
mysql -h127.0.0.1 -uroot -p12313 < mydb.sql # 直接执行mydb.sql脚本用于恢复数据库
# MYSQL
use db1;
source tb1tb2.sql;
- 导入只有数据表的sql文件时,需要先选择数据库,然后再导入;
3.3.3管理 - mysqladmin
# mysqladmin一般用于配置服务器,也可以用来创建或删除数据库:
mysqladmin [options] command [command-arg] [command [command-arg]]
# 常用的command(执行命令)有:
create db_name 创建数据库
drop db_name 删除数据库
flush-logs 刷日志
flush-tables 刷表,所有表数据写入磁盘盘
kill id,id,... 杀死某些进程
password new_password 修改(登录者的)登录密码
ping 检查服务器是否可用
status 显示服务器状态
variables 显示各配置参数的值
3.3.4日志 - mysqlbinlog
# 查看日志
mysqlbinlog mysql-bin.000983
# 根据日志恢复数据
mysqlbinlog [option] binlog_files | mysql -u root -p
[option] :
--disable-log-bin 在通过日志恢复数据库期间不再写日志
--no-defaults 不使用MySQL默认的设置
mysql -uroot -p123123 -h127.0.0.1登陆数据库
# SQL语句查询日志启用情况:
SHOW VARIABLES LIKE "log_%";
# 设置日志文件存储方式:
SET GLOBAL log_output="option";
--
option参数有3个值,分别是FILE,TABLE,FILE,TABLE;
FILE代表以文件形式存储,TABLE代表以数据表形式存储,FILE,TABLE代表以文件和数据表两种形式都进行存储。
--
# 查看日志文件位置
show variables like 'general_log_file';
'''
+------------------+-----------------------------------------------------------------+
| Variable_name | Value |
+------------------+-----------------------------------------------------------------+
| general_log_file | C:\phpstudy_pro\Extensions\MySQL8.0.12\data\LAPTOP-3N4T0RBF.log |
+------------------+-----------------------------------------------------------------+
'''
# 启动慢日志
SET GLOBAL log_slow_queries="ON";
# 设置long_query_time参数:
SET GLOBAL long_query_time=秒数;
# 启动常规查询日志
SET GLOBAL general_log="ON";
【注意】:虽然全局的long_query_time参数值已经被改变,但是对于本次连接并不生效,必须重新连接才会生效。
3.4授权与撤销授权
3.4.1用户管理
SELECT user FROM mysql.user; -- 查看所有用户
select user(); -- 查看当前用户
select database(); -- 查看当前使用的数据库
mysql -uroot -p123123 -h127.0.0.1 # 登录mysql
# MYSQL语句
# 创建用户
create user '用户名'@'允许登录的主机地址' identified by 密码;
#创建指定ip为 192.168.1.1 的lyn用户登录
create user 'lyn'@'192.168.1.1' identified by '123';
# 删除用户
drop user '用户名'@'允许登录的主机地址';
DELETE FROM mysql.user WHERE User="用户名" AND Host="主机名";
# 在删除用户后,必须执行更新权限语句:
# 修改用户名
rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
# 修改密码
set password for '用户名'@'IP地址' = Password('新密码');
UPDATE mysql.user SET Password=PASSWORD("新密码") WHERE User="用户名" [AND Host="主机名"];
# examples
DELETE FROM mysql.user WHERE User="new-user2" AND Host="127.0.0.1";
FLUSH PRIVILEGES;
CREATE USER "new-user2"@"127.0.0.1";
UPDATE mysql.user SET Password=PASSWORD("newpassword") WHERE User="new-user3" AND Host="%";
3.4.2连接数据库
import pymysql
# 连接数据库
def connect():
conn = pymysql.connect(host='localhost',user='root',passwd='123123',charset='utf8')
return conn.get_host_info()
# 执行SQL语句
cursor = conn.cursor() # 获取游标 【游标是一种数据访问对象,可用于创建数据库和数据表,也可用于在表中迭代一组行或者向表中插入新行。】
cursor.execute('create database carinfo')
# 确定使用的数据库 【也可在连接的时候就指定数据库 db='xxx'】
conn.select_db(dbName)
# 插入数据
sql = "insert into %s values ('%s', '%s', '%s')" % (tablename, '2017-8-19', 1000, 'Chevrolet')
# 接收返回值
fetchall(): 接收全部的返回结果行
fetchmany(size=None): 接收size条返回结果行
fetchone(): 返回一条结果行
cursor().execute(sql)
records = cursor.fetchall()
scroll(value, mode='relative'): 指针移动value条
# 在完成插入之后需要将插入事务提交,否则会导致相应的表死锁
conn.commit()
# 在对数据库的所有操作完成之后,需要关闭与数据库之间的连接:
conn.close()
3.4.3权限
# 查看权限:
show grants for '用户'@'IP地址'
# all表示允许做任何事, usage表示只允许登录
# 授予权限
grant 权限列表 on 库.表 to 用户名@'ip';
# 刷新权限
FLUSH PRIVILEGES;
# 查看全部的权限
SHOW PRIVILEGES;
# eg:
GRANT all privileges ON *.* TO "new-user1"@"%";
FLUSH PRIVILEGES;
授权操作只能是root用户来操作;grant给用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效;授权后一定要刷新权限,使权限立即生效:
**FLUSH PRIVILEGES;**
revoke 权限列表 on 库.表 from 用户名@'ip';
# eg:
revoke all on mydb1.table1 from user1@'localhost';
报错:mysql8:not allowed to create a user with GRANT
原因:授权的形式是 database.table
,授权形式错了,😅GRANT all privileges ON mei_tuan.* TO "test"@"127.0.0.1";
好像localhost 和127.0.0.1不能混着来,
3.4.4命令行形式修改MySQL8密码
系统:Windows
MySQL版本:8.0.12
首先以管理员权限打开powershell,用net stop mysql8 关闭服务
注意这里是mysql8, 要和任务管理器中的服务,中的mysql服务的名称对应起来即可。
在命令行输入:
mysqld --console --skip-grant-tables --shared-memory
然后启动另外一个powershell,输入MySQL -u root直接登陆,接着输入alter user 'root'@'localhost' identified by 'min66666';
注意这里密码最好是字母加数字,纯数字不一定能设置成功。
然后刷新一下权限,flus
net start mysql8
输入MySQL -u root
在输入刚刚设置的密码即可。