您的位置:首页 > 数据库 > MySQL

mysql系列之5.mysql备份恢复

2016-08-12 09:49 113 查看
备份数据: mysqldump

#mysqldump -uroot -p123456 test > /test_bak.sql

#egrep -v "#|\*|--|^$" /test_bak.sql

 

指定对应字符集

#mysqldump -uroot -p123456 --default-character-set=utf8 test > /test_bak.sql

 

加 -B 参数: 备份多个库 (增加创建数据库和连接数据库的命令)

#mysqldump -uroot -p123456 -B test > /test_bak.sql

#mysqldump -uroot -p123456 -B test test2 > /test_bak.sql

 

加 --compact 参数: 减少备份文件的输出(忽略drop table, 忽略set names, 忽略add locks, 忽略disable keys), 所以这个参数生产环境不用它!!

#mysqldump -uroot -p123456 --compact -B test > /test_bak.sql

 

备份单个表: 不能加 -B 参数

#mysqldump -uroot -p123456 test tb2 > /test_bak.sql

 

备份所有表: -A 参数

#mysqldump -uroot -p123456 -A -B test > /test_bak.sql

 

只备份数据: -t 参数

#mysqldump -uroot -p123456 -t -B test tb2 > /test_bak.sql

 

只备份结构: -d 参数

#mysqldump -uroot -p123456 -d -B test > /test_bak.sql

 

锁表: -x 锁定所有表,    -l 只读锁表

 

innodb事务数据库备份:  --single-transaction

#mysqldump -uroot -p123456 -A -B --master-data=2 --events --single-transaction|gzip > /all.sql.gz

 

myisam数据库库备份:

#mysqldump -uroot -p123456 -A -B --master-data=2 -x --events|gzip > /all.sql.gz

 

增量备份: 刷新binlog, -F 参数

#mysqldump -uroot -p123456 -F -B test > /test_bak.sql

 

增量备份: 不刷新binlog

#mysqldump -uroot -p123456 --master-data=1 test > /test_bak.sql

 

--master-data参数详解

mysqldump导出数据时,当这个参数的值为1的时候,mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,CHANGE MASTER TO后面紧接着就是file和position的记录,在slave上导入数据时就会执行这个语句,salve就会根据指定这个文件位置从master端复制binlog。默认情况下这个值是1

当这个值是2的时候,chang master to也是会写到dump文件里面去的,但是这个语句是被注释的状态。

 

分库备份: .sh脚本

#!/bin/sh

MYUSER=root

MYPASS=123456

MYLOGIN="mysql -u$MYUSER -p$MYPASS"

MYDUMP="mysqldump -u$MYUSER -p$MYPASS -B"

MYDUMP2="mysqldump -u$MYUSER -p$MYPASS"

DATABASE="$($MYLOGIN -e "show databases;"|egrep -vi "database|infor|perfor")"

 

for dbname in $DATABASE

do

      MYDIR=/mysqlbak/$dbname

      [ ! -d $MYDIR ] && mkdir -p $MYDIR

      $MYDUMP $dbname|gzip > $MYDIR/${dbname}_$(date +%F).sql.gz

     

      for tbname in `$MYLOGIN -e "show tables from $dbname;"|sed '1d'`

      do

            $MYDUMP2 $dbname $tbname|gzip >$MYDIR/${dbname}_${tbname}_$(date +%F).sql.gz

      done

     

done

 

恢复数据

#mysql -uroot -p123456 -e "use test;drop table te;"

#mysql -uroot -p123456 test < /test_bak.sql

 

查看mysql连接

两次show之后, 发现还有语句在呆着, 说明有慢查询, 可以用 show full processlist 来查看完整的sql语句, 注意查看 sleep / lock 是否过多

#mysql -uroot -p123456 -e "show processlist;"

 

查看mysql状态: 加上global表示整个数据库, 否则表示当前会话

#mysql -uroot -p123456 -e "show global status;"

 

不重启修改mysql参数

mysql> set global key_buffer_size=1024*1024*32;

mysql> show variables like 'key_buffer%';

 

mysql批量插入测试数据

一、建表语句

use test;

create table student(

Sno int(10) NOT NULL COMMENT '学号',

Sname varchar(16) NOT NULL COMMENT '姓名',

Ssex char(2) NOT NULL COMMENT '性别',

Sage tinyint(2)  NOT NULL default '0' COMMENT '学生年龄',

Sdept varchar(16)  default NULL  COMMENT '学生所在系别',

PRIMARY KEY  (Sno)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

二、批量插入数据脚本

#!/bin/bash

MysqlLogin="mysql -uroot -p123456"

i=1

while true

do

      ${MysqlLogin} -e "insert into test.student values ("$i",'oldboy"$i"','m','21','computer"$i"');"

      ((i++))

      sleep 1;

done

 

 

mysqlbinlog(增量恢复)

# vi /etc/my.cnf

log-bin=binlog_file   //去掉注释

# /etc/init.d/mysqld restart

mysql> insert into ****** #插入测试数据

cd /usr/local/mysql/data/

mysqlbinlog  binlog_file.000001 #查看文件内容

cp binlog_file* /bak/mysql/

mysqlbinlog /bak/mysql/binlog_file.000004 --start-date="2010-09-29 18:00:00" --stop-date="2010-09-29 23:00:00" -r time.sql

mysqlbinlog /bak/mysql/binlog_file.000004 --start-position=370 --stop-position=440 -r pos.sql

mysqlbinlog /bak/mysql/binlog_file.000004 -d test -r test.sql

mysqlbinlog /bak/mysql/binlog_file.000004 -h 192.1681.102
-r 102.sql

mysqlbinlog /bak/mysql/binlog_file.000004 -p 3306 -r 3306.sql

mysqlbinlog /bak/mysql/binlog_file.000004 --server-id=1 -r s1.sql

以上6个条件可以排列组合, 作为恢复数据的条件

 

binlog的文件内容, 示例:

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

/*!40019 SET @@session.max_insert_delayed_threads=0*/;

/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

DELIMITER /*!*/;

# at 4

#160712 20:00:27 server id 1  end_log_pos 107   Start: binlog v 4, server v 5.5.32-log created 160712 20:00:27 at startup

# Warning: this binlog is either in use or was not closed properly.

ROLLBACK/*!*/;

BINLOG '

y66FVw8BAAAAZwAAAGsAAAABAAQANS41LjMyLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAADLroVXEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==

'/*!*/;

# at 107

#160712 20:02:51 server id 1  end_log_pos 351   Query   thread_id=1     exec_time=0    error_code=0

use `test`/*!*/;

SET TIMESTAMP=1468378971/*!*/;

SET @@session.pseudo_thread_id=1/*!*/;

SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;

SET @@session.sql_mode=0/*!*/;

SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

/*!\C utf8 *//*!*/;

SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;

SET @@session.lc_time_names=0/*!*/;

SET @@session.collation_database=DEFAULT/*!*/;

CREATE TABLE `te` (

`id`  int(4) NOT NULL AUTO_INCREMENT ,

`a` char(5) NOT NULL,

`b` char(5) NOT NULL,

`c` char(5) NOT NULL,

PRIMARY KEY (`id`),

KEY `index_a_b_c` (`a`(3),`b`,`c`)

)

/*!*/;

# at 351

#160712 20:03:43 server id 1  end_log_pos 419   Query   thread_id=1     exec_time=0    error_code=0

SET TIMESTAMP=1468379023/*!*/;

BEGIN

/*!*/;

# at 419

#160712 20:03:43 server id 1  end_log_pos 524   Query   thread_id=1     exec_time=0    error_code=0

SET TIMESTAMP=1468379023/*!*/;

insert into te values(1,'aaa','bbb','ccc')

/*!*/;

# at 524

#160712 20:03:43 server id 1  end_log_pos 551   Xid = 14

COMMIT/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: