mysql
日志:
error log
:记录错误信息、
启动停止过程中的日志信息
、
调度事件
、启用主从服务器会记录从服务器的信息
启用
--log-error
没参数会保存至数据目录下
host_name.err
即
station_example.err
--log-error=/var/log/mysql.error
mysql_safe --log_warning 1
会在错误日志中记录警告信息
binary log
二进制日志
对数据修改的语句会记录下来
实现
pitr point-in-time recovery
将数据库恢复到某个时间点
实现数据库复制的
默认记录在数据目录下
mysql-bin.index
文本日志
====mysql-bin.000001
二进制格式
ls /data/
查看二进制日志
show binary logs
;
启用时添加
--log-bin = /data/log/binary/changelog
--log-bin-index = /data/log/
查看二进制文件内容
# mysqlbinlog /data/mysql-bin.000001
mysqlbinlog /data/mysql-bin.000001 --start-datetime="2011-03-21 12:24:30"
--end-datetime="2011-03-21 14:24:30"
mysql
中查看日志
show binlog envents
show binlog envents in 'mysql-bin.000001';
show binlog envents in 'mysql-bin.000001' from 525 limit 3;
从
525
开始的前三行
general query log
:一般日志文件
默认没开启
启用
--general_log=
--general_log_file
指定一般日志文件位置
--slow_query_log
慢查询日志
--slow_query_log_log
--log_output
慢日志记录的格式
none
不记录
file
记录在文件
table
记录在表中
默认为
file
查看一般日志文件是否开启:
select @@general_log;
select @@general_log_log;
slow query log
慢速日志查询日志
mysql
的日志滚动:日志过大做出的策略
# mysqladmin refresh
flush logs
手动滚动二进制和错误日志
mysql
中
可以将其脚本放到特定的目录
crontab
中
purge binary logs
修剪二进制日志
删除指定位置以前的所有日志
purge binary logs to 'mysql-bin.000005'
修剪
000005
之前的日志
purge binary logs before '2011-3-5 23:00:00';
检索修复表
:
myisamchk --extend-check
文件名
扩展检查修复
--recover stu2.MYI
myisamchk --extend-check /data/mydb/stu2.MYI
mysql
中执行:
check table stu2
检查表
repair table sru2
修复表
analyze table stu2
分析表
optimize table stu2
又换表
mysql
的备份和恢复:
数据库的损坏:电源
人为
硬件
网络失败
备份:
完全
增量
差异
冷备
温备
热备
逻辑备份
物理备份
一致性备份
:文件的修改时间在备份之前
可用来做恢复的
非一致性备份
名字
支持引擎
类型
备份速度
恢复速度
工具:
mysqldump
逻辑
all
引擎
温备:只读不写的
慢
慢
mysqldump innodb
热备:可读可写
慢
慢
ibbackup
商业的
innodb hot
速度快
快
mk-parallel-backup all
引擎
温备
中速
中速
filesystem all
冷备
最快
最快
snapshot all hot
快
快
mysqlhotcopy mylsam
几乎冷备
快
快
mysqldump -uroot -p mydb > /root/mysql.sql
备份
mydb
数据库
mysqldump -uroot -p mydb,class > /root/mysql.sql
备份
mydb
和
class
数据库
mysqldump -uroot -p --all-databases > /root/mysql.sql
备份所有
恢复前一般先创建好改数据库
mysql -uroot -p mydb < /root/mysql.sql
恢复
或
source /root/mysql.sql mysql
中执行
mysqldump
参数:
mysqldump --flush-logs 备份前先日志滚动一下 达到同步状态
--lock-tables 备份前将表锁定一下 防止其他用户写
--lock-all-tables 锁定所有的表
--single-transaction 备份innodb数据库引擎时 可以备份一致性的innodb即使有事务没完成
--all-databases 备份所有数据库
--databases 备份多个不是所有数据库 中间用空格隔开
--master-data=n 数字 记录二进制文件名和位置
--events 备份事件
--triggers 备份触发器
--routines 备份存储过程和存储函数的
--where "" 指定过滤条件,只备份某些数据
mysqldump -uroot -p --flush-logs --lock-all-tables --events --routines --triggers mydb >
/root/mysql-`date +"%F"`.sql
selectinfoutfile
可以备份具体的表或数据
select * into outfile '/tmp/stu.sql' from stu
备份具体表
要有
file
权限一般用在表数据不小心删除
truncated table stu
删除表
stu
的数据
恢复表
先创建号该表的表结构
use mydb
load data infile '/tmp/stu.sql' into table stu
备份
mk-parallel-backup
mk-parallel-backup --basedir=/bachup
恢复:
mk-parallel-restore /backup
http://www.maatkit.org
网站下载该
rpm
包进行安装
snapshot
快照备份
备份的整个数据库
数据要在同一个
LVM
分区上
mysqlhotcopy
备份前要锁数据库
备份
MyISAM
的物理热备
LOCK TABLES stu READ;
锁表
将所有的表都锁上
UNLOCK TABLE stu
表解锁
或
UNLOCK TABLES
备份:
mysqlhotcopy
mysqlhotcopy mydb /backup
恢复:
mysqlhotcopy
时间点备份:
mysql
mysqlbinlog --start-position 15465
完全备份后的位置
--end-opsition 202010
删除之前的位置
| mysql -uroot -p
mysqlbinlog --start-position 15465 --end-opsition 202010 > /tmp/bin.sql
恢复:
mysql -uroot -p < /tmp/bin.sql