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.log

mysqldumpslow /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

posted @ 2020-10-24 17:02  享受折腾  阅读(416)  评论(0编辑  收藏  举报