centos7 mysql 5.7 日志 备份
1 内核及公共消息日志:/var/log/messages 2 3 计划任务日志:/var/log/cron 4 5 系统引导日志:/var/log/dmesg 6 7 邮件系统日志:/var/log/maillog 8 9 用户登录日志:/var/log/lastlog、 /var/log/secure、 /var/log/wtmp、 /var/run/btmp 10 11 vim /etc/rsyslog.conf //查看日志文件配置信息 12 vim messages //查看系统日志文件
开启 general log 将所有到达MySQL Server的SQL语句记录
show variables like 'general_log'; -- 查看日志是否开启 set global general_log=on; -- 开启日志功能 show variables like 'general_log_file'; -- 看看日志文件保存位置 set global general_log_file='tmp/general.lg'; -- 设置日志文件保存位置 show variables like 'log_output'; -- 看看日志输出类型 table或file set global log_output='table'; -- 设置输出类型为 table set global log_output='file'; -- 设置输出类型为file show variables like ‘%log%’;
Binlog 记录了所有的DDL和DML(除了数据查询语句)语句(记录mysql内部增删改等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
show variables like '%log_bin%'; --查看binlog日志设置 show master logs; show master status; flush logs; reset master; show binlog events in 'mysql-bin.000002'; --查看binlog日志 show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]; show binlog events in 'mysql-bin.000001' \G 指定查询 mysql-bin.000002这个文件,从pos点:624开始查起,偏移2行(即中间跳过2个)查询10条(即10条语句)。 show binlog events in 'mysql-bin.000002' from 624 limit 2,10\G;
查询主库binlog和pos点
show variables like '%log_bin%'; --查看binlog日志设置 cat /var/lib/mysql/mysql-bin.index
mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000003
show binlog events in 'mysql-bin.000003';
change master to
show variables like "binlog_format"; MySql中查询日志相关: show variables like 'log_bin'; show variables like '%general_log%'; show variables like '%log_%';
slow log show variables like 'slow_query%'; show variables like 'long%'; set global slow_query_log=1; find / -type f -name "my.cnf" [mysqld] slow_query_log =1 slow_query_log_file=/application/mysql/data/localhost-slow.log long_query_time = 1
show variables like ‘%profiling%’; set profiling=on; 开启profile show profiles;
cat /var/lib/mysql/test1-slow.logmysqldumpslow /var/lib/mysql/mysql-slow.log
show global status like '%Slow_queries%';
mysql> show variables like '%slow%'; +---------------------+-------------------------+ | Variable_name | Value | +---------------------+-------------------------+ | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | D:/log/slow.txt | +---------------------+-------------------------+ 其中,各参数说明如下: slow_launch_time: 慢查询超过的执行时间值 slow_query_log: 是否打开慢查询日志功能 show_query_log_file:慢查询日志目录 开启慢查询日志功能: mysql配置文件(win mysql.ini linux mysql.conf)下, [mysqld] log-slow-queries ="D:/xampp/mysql/long.txt" long_query_time = 1 log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log) long_query_time=2 (记录超过的时间,默认为10s) log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启) log-long-format (如果设置了,所有没有使用索引的查询也将被记录)
mkdir -p /home/neoo/backup/mysql vim mysqlBackup.sh #!/bin/bash # 以下配置信息请自己修改 mysql_user="USER" #MySQL备份用户 mysql_password="PASSWORD" #MySQL备份用户的密码 mysql_host="localhost" mysql_port="3306" mysql_charset="utf8" #MySQL编码 backup_db_arr=("db1" "db2") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3") backup_location=/opt/mysql #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹 expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭 expire_days=3 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效 # 本行开始以下不需要修改 backup_time=`date +%Y%m%d%H%M` #定义备份详细时间 backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间 backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天之前的日期 backup_dir=$backup_location/$backup_Ymd #备份文件夹全路径 welcome_msg="Welcome to use MySQL backup tools!" #欢迎语 # 判断MYSQL是否启动,mysql没有启动则备份退出 mysql_ps=`ps -ef |grep mysql |wc -l` mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l` if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then echo "ERROR:MySQL is not running! backup stop!" exit else echo $welcome_msg fi # 连接到mysql数据库,无法连接则备份退出 mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end use mysql; select host,user from user where user='root' and host='localhost'; exit end flag=`echo $?` if [ $flag != "0" ]; then echo "ERROR:Can't connect mysql server! backup stop!" exit else echo "MySQL connect ok! Please wait......" # 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份 if [ "$backup_db_arr" != "" ];then #dbnames=$(cut -d ',' -f1-5 $backup_database) #echo "arr is (${backup_db_arr[@]})" for dbname in ${backup_db_arr[@]} do echo "database $dbname backup start..." `mkdir -p $backup_dir` `mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz` flag=`echo $?` if [ $flag == "0" ];then echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz" else echo "database $dbname backup fail!" fi done else echo "ERROR:No database to backup! backup stop" exit fi # 如果开启了删除过期备份,则进行删除操作 if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then #`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;` `find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf` echo "Expired backup data delete complete!" fi echo "All database backup success! Thank you!" exit fi chmod 600 /opt/mysqlBackup.sh chmod +x /opt/mysqlBackup.sh sh mysqlBackup.sh crontab -e 00 03 * * * /opt/mysqlBackup.sh 生成的配置文件位于/var/spool/cron/root vi /etc/crontab 00 03 * * * root /opt/mysqlBackup.sh mysql -u username -p databse < backup.sql
touch -t 06061806 touch_test_file #修改文件日期
touch -r a.txt touch_test_file
stat touch_test_file
针对压缩的备份数据恢复 方法一(建议此种) gzip -d /opt/mysql_bak.sql.gz mysql -uroot -prootabcd < /opt/mysql_bak.sql 方法二 gunzip< mysql_bak.sql.gz >/opt/ mysql_bak.sql mysql -uroot -pxxx < /opt/mysql_bak.sql 或者 gunzip < mysql_bak.sql.gz | mysql -uroot -pxxx database
ql的备份命令 myisam引擎 mysqldump -uroot -pxxx -A -B -F --master-data=2 -x --events >/opt/name.sql.gz innodb引擎 mysqldump -uroot -pxxx -A -B -F --master-data=2 --events --single-transaction | gzip>/opt/name.sql.gz --master-data 这个参数在建立slave数据库的时候会用到,当这个参数的值为1的时候,mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,CHANGE MASTER TO后面紧接着就是file和position的记录,file和position记录的位置就是slave从master端复制文件的起始位置。默认情况下这个值是1 当这个值是2的时候,chang master to也是会写到dump文件里面去的,但是不会有上面那个作用了 --master-data=1 (--master-data=2注释) 表示在dump过程中记录主库的binlog和pos点,并在dump文件中不注释掉这一行,即恢复时会执行; -F 切割binlog参数-A 备份所有库 -B, --databases 备份数据时使用-B参数,会在备份数据中增加建库及use库的语句 使用-B参数,后面可以接多个库,否则只能有一个库,之后的都被认为是表--single-transaction 适合innodb事务数据库备份(可代替锁表) 设置事务的隔离级别为可重复读,即REPEATABLE READ,这样能保证在一个事务中所有相同的查询读取到同样的数据,也就大概保证了在dump期间,如果其他innodb引擎的线程修改了表的数据并提交,对该dump线程的数据并无影响. :InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据。-x,--lock-all-tables Locks all tables across all databases. This is achieved by taking a global read lock for the duration of thewhole dump. Automatically turns --single-transaction and --lock-tables off.-l, --lock-tables Lock all tables for read.mysql其他常用参数--default-character-set=latin1 指定字符集(一般不用)-d 只备份表结构-t 只备份数据-T,--tab 分离表和数据,数据是文本-R 备份存储过程-q Don't buffer query, dump directly to stdout.(Defaults to on; use --skip-quick to disable.)
https://www.cnblogs.com/gtms/p/6576921.html