mysql运维
常见操作
清空表数据
1)清空表数据:truncate
sql命令:truncate table 表名1,表名2...
注意:
- truncate会删除表中的所有数据、释放空间,但是保留表结构
- truncate删除操作立即生效,原数据不放到rollback segment中,不能rollback,操作不触发trigger
- truncate删除数据后不写服务器log,整体删除速度快
2)删除表:drop
sql命令:drop table if exists 表名;
注意:
- drop会删除整个表,包括表结构和数据,释放空间
- 立即执行,执行速度最快
- 不可回滚
3)删除/清空表数据:delete
sql命令:delete from 表名;
注意:
- 删除表中数据而不删除表结构,也不释放空间
- delete可以删除一行、多行、乃至整张表
- 每次删除一行,都在事务日志中为所删除的每行记录一项,可回滚
binlog日志
binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志;其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句,记录了所有的DDL和DML(除了数据查询语句)语句,并以事务的形式保存在磁盘中,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
作用主要有:
- 复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves并回放来达到master-slave数据一致的目的
- 数据恢复:通过mysqlbinlog工具恢复数据
- 增量备份
二进制日志包括两类文件:
- 二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,
- 二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。
日志管理
开启binlog
修改配置文件 my.cnf
:
1 | log-bin=mysql-bin |
这里的
log-bin
是指以后生成各 Binlog 文件的前缀,比如上述使用mysql-bin,那么文件就将会是mysql-bin.000001、master-bin.000002 等。log-bin-index
则指 binlog index 文件的名称,这里我们设置为mysql-bin.index,可以不配置。
基础命令
在mysql命令行窗口
执行:
1 | ## 查看配置 |
查看日志内容
1)mysqlbinlog查看日志
在MySQL目录下执行命令:
1 | # 查看日志内容 |
2)show binlog events查看binlog日志
在mysql命令行窗口
执行:
1 | # 查询第一个(最早)的binlog日志: |
数据恢复
备份
1 | # 1.先完全备份,并生成完成备份之后的新日志 |
恢复
恢复步骤:
1 | # 1.刷新日志生成新文件,保证要还原的日志mysql-bin.000005不再变化 |
binlog日志恢复命令解析:
1 | mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名 |
- 常用选项:
--start-position=953
起始pos点--stop-position=1437
结束pos点--start-datetime="2024-01-29 13:00:00"
起始时间点--stop-datetime="2024-01-30 13:00:00"
结束时间点--database=test
指定只恢复test数据库
- 不常用选项:
-u --user=name
连接到远程主机的用户名-p --password[=name]
连接到远程主机的密码-h --host=name
从远程主机上获取binlog日志--read-from-remote-server
从某个MySQL服务器上读取binlog日志
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Anyisure!
评论
WalineGitalk