备份数据: 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

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 ) NOT NULL COMMENT '学号',

Sname ) NOT NULL COMMENT '姓名',

Ssex ) NOT NULL COMMENT '性别',

Sage )  ' COMMENT '学生年龄',

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

PRIMARY KEY  (Sno)

) ENGINE DEFAULT CHARSET=utf8;

二、批量插入数据脚本

#!/bin/bash

MysqlLogin="mysql -uroot -p123456"

i=

while true

do

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

      ((i++))

      ;

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的文件内容, 示例:

;

05-28 21:02