MySQL
数据库服务 器的所有 SQL
指令。%general%
show variables like '%general%';
general_log
的值是 OFF
表示通用查询日志处于关闭状态, 系统默认是 OFF
的, 打开会消耗资源并占有磁盘空间, 我们可以手动进行修改这个变量在需要的时候进行开启。 GJTECH-PC.log
SET GLOBAL general_log = 'ON'; -- 通用查询日志开启
SET @@global.general_log_file = 'C:\mytest.log'; -- 修改日志名称
打开这个 , 用记事本就可以看了
-- 第一步,关闭通用查询日志
SET GLOBAL general_log = 'OFF'; -- 关闭通用查询日志
SHOW VARIABLES LIKE '%general_log%'; -- 查看通用查询日志状态 general 也可以
-- 第二步,把通用查询日志文件“C:\mytest.log”移至备份文件夹,空出磁盘 H 的空间。 就是把这个文件移到别的地方
-- 第三步,开启通用查询日志
SET GLOBAL general_log = 'ON';
SHOW VARIABLES LIKE '%general_log%'; -- 这个时候 目录下会重新生产一个 mytest.log
慢查询日志用来记录执行时间超过指定时长的查询。它的主要作用是,帮助我们发现那些 执行时间特别长的 SQL
查询,并且有针对性地进行优化,从而提高系统的整体效率。
C:\ProgramData\MySQL\MySQL Server 8.0) MySQL 的配置文件“my.ini”
记事本打开即可
如果修改了 MySQL 的配置文件“my.ini”,就需要重启服务器,这样才 能使修改生效。
控制慢查询日志的还有一个系统变量:min_examined_row_limit
。 这个变量的意思是,查询扫描过的最少记录数。
查询扫描过的记录数大于等于min_examined_row_limit,并且查询执行时间超过 long_query_time 的值,那么,这个查询就被记录到慢查询日志中.
例子
-- 查看当前正在写入的二进制日志的 SQL 语句是:
SHOW MASTER STATUS; -- 查看当前正在写入的二进制日志的名称和当前写入的位置:
-- 查看所有的二进制日志的 SQL 语句是:
SHOW BINARY LOGS;
-- 查看二进制日志中所有数据更新事件的 SQL 语句是:
SHOW BINLOG EVENTS IN 二进制文件名;
-- 刷新 二进制日志
FLUSH BINARY LOGS;
-- 关闭服务器正在写入的二进制日志文件,并重新打开一个新文件,文件名的后缀在现有的基础上加 1。
-- 用二进制日志恢复数据
mysqlbinlog –start-positon=xxx --stop-position=yyy 二进制文件名 | mysql -u 用户 -p
-- 执行二进制日志中从位置 xxx 开始,到 yyy 截止的所有数据更新操作。这里的截止位置也可以不写,意思是从位置 xxx 开始,执行二进制文件中的所有数据更新操作。
-- 删除二进制日志
RESET MASTER;
-- 所有二进制日志文件都被删除了,MySQL 从头准备了一个“.000001”为后缀的新的二进制日志文件。
SHOW BINARY LOGS;
PURGE MASTER LOGS TO 'GJTECH-PC-bin.000005'; -- 删除指定的日志
就是指对数据库中存储的全部数据进行备份。备份完成之后,我又在商品信息表中插入了新数据。
-- 第一步,做数据库备份。
mysqldump -u 用户 -p 密码 数据库 > 备份文件
H:\>mysqldump -u root -p demo > mybackup.sql // 把demo全备份了
Enter password: *****
-- 第二步,用“FLUSH BINARY LOGS;” 产生新的日志。
-- 这步操作的目的是:产生一个新的二进制日志文件,使这个文件只保存数据备份之后的数据更新事件,这样可以方便我们查看文件的内容
-- 第三步,给商品信息表插入一条新的数据
-- 第四步,准备从备份文件恢复数据。
SHOW BINARY LOGS; -- xxbin.000012
FLUSH BINARY LOGS; -- 刷新产生新的二进制log
SHOW MASTER STATUS;
DROP DATABASE demo;CREATE DATABASE demo; -- 删除demo 并且 创建一个同名的
-- 第五步,从备份恢复数据
mysql -u 用户 -p 密码 数据库名称 < 备份文件
H:\>mysql -u root -p demo<mybackup.sql -- 这个表保存的是没有增加内容的
Enter password: *****
SELECT * FROM demo.goodsmaster;
-- 增加的内容在 上面刷新前的xx bin.00000012 中
C:\>mysqlbinlog --start-position=306 "C:\ProgramData\MySQL\MySQL Server 8.0\Data\GJTECH-PC-bin.000012" | mysql -u root -p
Enter password: *****
-- 更新增加的内容部分
mysql> SHOW VARIABLES LIKE '%innodb_undo%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_undo_directory | .\ | -- 表示回滚日志的存储目录是数据目录。 数据目录的位置可以通过查询变量“datadir”来查看
| innodb_undo_log_encrypt | OFF | -- 表示回滚日志不加密。
| innodb_undo_log_truncate | ON | -- 表示回滚日志是否自动截断回收,前提是设置了独立表空间。
| innodb_undo_tablespaces | 2 | -- 表示回滚日志有自己的独立表空间,而不是在共享表空间ibdata文件中。
+--------------------------+-------+
4 rows in set, 1 warning (0.00 sec)
mysql> SHOW VARIABLES LIKE '%innodb_log_files_in_group%';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_log_files_in_group | 2 | -- 有 2 个重做日志文件
+---------------------------+-------+
1 row in set, 1 warning (0.00 sec)
-- 备份表
mysqldump -h 服务器 -u 用户 -p 密码 数据库名称 [表名称 … ] > 备份文件名称
-- -h 服务器 默认本机“localhost”
H:\>mysqldump -u root -p demo goodsmaster membermaster > test.sql; -- 在cmd.exe 中输入就可以
mysqldump -h 服务器 -u 用户 -p 密码 --databases 数据库名称 … > 备份文件名 -- 备份数据库
mysqldump -h 服务器 -u 用户 -p 密码 --all-databases > 备份文件名 -- 备份整个数据库服务器
win10的cmd
就可以 , 语句不用带 ;
xx.sql
保存的是表的信息 , 需要指定 数据库名称 。-- 恢复1
mysql -u root -p demo < test.sql
-- 恢复2 : 还不会用
USE demo;
SOURCE H:\\test.sql
SELECT 字段列表 INTO OUTFILE 文件名称
-- 文件名称为绝对路径 secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"
FIELDS TERMINATED BY 字符 -- 列之间的分隔符是“字符”;
LINES TERMINATED BY 字符 -- 行之间的分隔符是“字符”。
FROM 表名;
需要my.ini
中的参数设定路径secure-file-priv
LOAD DATA INFILE 文件名
INTO TABLE 表名 FIELDS
TERMINATED BY 字符
LINES TERMINATED BY 字符;
DELETE FROM demo.goodsmaster ;-- 删除表的数据