MySQL备份恢复操作

【备份的命令】

1)备份数据库

mysqldump -uroot -pwsyht -B 库名 > /opt/test.sql #加-B表示增加use db和create database db的信息


2)查看数据库

egrep -v "#|\*|--|^$" /opt/test.sql   #查看test.sql的库内容


3)恢复数据库

mysql -uroot -pwsyht < /opt/test.sql  #test.sql已经建库,所以恢复不用指定数据库


4)压缩备份

mysqldump -uroot -pwsyht -B 库名 | gzip > /opt/test.sql.gzip  #压缩备份减少占用内存空间,压缩效率近3倍


5)备份多个库

mysqldump -upeter -pwsyht123 -B test allow | gzip> test.sql.gz #加-B备分多个库,备份test库和allow库,如果还有多个库就用空格分开


6)备份单个表

mysqldump -uroot -pwsyht123 库名 表名  > 备份的文件名.sql


7)查看要备份的内容

mysqldump -uroot -pwsyht123 --compact test t1 #--compact去掉注释,适合调式,生产环境不用,test库名,t1表名


8)只备份表结构

mysqldump -uroot -pwsyht123 -d 库名 表名 > 备份文件名.sql  #-d只备份表结构


9)只备份表数据

mysqldump -uroot -pwsyht123 -t 库名 表名 > 备份文件名.sql #-t只备份数据


10)查看帮助

mysqldump --help > a.log


11)备份所有库所有表

mysqldump -uroot -pwsyht123 -A -B --events > 备份文件名.sql  #-A备份所有库所有表,-B备份创建库的语句


12)刷新binlog参数

mysqldump -uroot -pwsyht123 -A -B -F --events > 备份文件名.sql #-F刷新binlog参数


13)--master-data增加binlog日志文件名及对应的位置点

mysqldump -uroot -pwsyht123 --master-data=2 --compact > 备份文件名.sql 



【其他使用方法】

myisam引擎

mysqldump -uroot -pwsyht123 -A -B -F --master-data=2 -x --events > a.sql #-x表示锁表


innodb引擎(innodb备份命令:推荐使用的)

mysqldump -uroot -pwsyht123 -A -B -F --master-data=2 --events --single-transaction > all.sql


--master-data 作用:

--master-data=2(前面“--”号代表加注释,指还原到107的位置,文件名为mysql-bin.000009)

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=107;


--master-data=1(不加注释,用于主从同步,指还原到107的位置,文件名为mysql-bin.000009)

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=107;



【恢复的命令】

mysql> source /mnt/mysql_bak_B.sql

mysql -uroot -pwsyht123 < /opt/mysql_bak_B.sql


通过脚本备份

# ls

# wsyht_gbk_bak.sql

# ls *.sql | sed 's#_bak.sql##g'

wsyht_gbk

for dbname in `ls *.sql | sed 's#_bak.sql##g'`;do mysql -uroot -pwsyht123 < ${dbname}_bak.sql;done



【在线修改参数】

mysql -uroot -pwsyht123 -e "set names latinl;use wsyht;select *from student;"


查看连接MySQL的连接数

mysql -uroot -pwsyht123 -e "show full processlist;"


查看有没有打开log-bin日志

mysql -uroot -pwsyht123 -e "show variables;" | grep log_bin


查看Mysql状态

mysql -uroot -pwsyht123 -e "show global status;" | grep sel

mysql -uroot -pwsyht123 -e "show global status like '%insert%';" 

mysql -uroot -pwsyht123 -e "show global status;" | less status



【更改数据库参数不重启生效】

mysql> set global key_buffer_size=1024*1024*32; #设置索引缓存大小为32兆

mysql> show variables like "key_buffer%";  #查看设置的变量



【生产环境我的使用方法】


获得数据库前半部分示例:

mysql -uroot -pwsyht123 -e "show databases;" | egrep -vi "cheu|mysql|perfor|infor|database" 

mysql -uroot -pwsyht123 -e "show databases;" | sed '1,3d;6d;7d'



【备份单个库】

mysqldump -uroot -pwsyht123 -B d1 | gzip > /opt/d1bak_$(date +%F).sql.gz  #单实例备份方法

mysqldump -uroot -pwsyht123 -S /data/3306mysql.sock -B d1 | gzip > /opt/d1bak_$(date +%F).sql.gz  #多实例备份方法



【分库备份】脚本备份多个库

单实例(通过列表形式进行备份)

vim dbbak01.sh

#!/bin/bash

myuser=root

mypass=wsyht123

mydump="mysqldump -u$myuser -p$mypass"

[ ! -e /opt/database ] && mkdir /opt/database

for database in d1 d2

do

$mydump -B $database | gzip > /opt/${database}_$(date +%F).sql.gz

done


多实例(通过列表形式进行备份)

vim dbbak01.sh

#!/bin/bash

myuser=root

mypass=wsyht123

socket=/data/3306/mysql.sock

mydump="mysqldump -u$myuser -p$mypass -S $socket"

[ ! -e /opt/database ] && mkdir /opt/database

for database in d1 d2

do

 $mydump -B $database | gzip > /opt/${database}_$(date +%F).sql.gz

done 


单实例(通过数据库取列表进行备份)

vim dbbak02.sh

#!/bin/bash

myuser=root

mypass=wsyht123

mycmd="mysql -u$myuser -p$mypass"

mydump="mysqldump -u$myuser -p$mypass"

[ ! -e /opt/database ] && mkdir /opt/database

for database in `$mycmd -e "show databases;" |  egrep -vi "mysql|perfor|infor|database" `

do

$mydump -B $database | gzip > /opt/${database}_$(date +%F).sql.gz

done


多实例 (通过数据库取列表进行备份)

vim dbbak02.sh

#!/bin/bash

myuser=root

mypass=wsyht123

socket=/data/3306/mysql.sock

mycmd="mysql -u$myuser -p$mypass -S $socket"

mydump="mysqldump -u$myuser -p$mypass -S $socket"

[ ! -e /opt/database ] && mkdir /opt/database

for database in `$mycmd -e "show databases;" |  sed '1,2d'| grep -v "mysql|schema"`

do

 $mydump -B $database | gzip > /opt/${database}_$(date +%F).sql.gz

done 



【分库分表备份】

单实例

#!/bin/bash

myuser=root

mypass=wsyht123

mycmd="mysql -u$myuser -p$mypass"

mydump="mysqldump -u$myuser -p$mypass"

for database in `$mycmd -e "show databases;" |  egrep -vi "mysql|perfor|infor|database" `

do

[ ! -e /opt/${database} ] && mkdir /opt/${database}

for table in `$mycmd -e "show tables from $database;" | sed '1d'`

do

$mydump $database $table | gzip > /opt/$database/${database}_${table}_$(date +%F).sql.gz

done

done


多实例 

#!/bin/bash

myuser=root

mypass=wsyht123

socket=/data/3306/mysql.sock

mycmd="mysql -u$myuser -p$mypass -S $socket"

mydump="mysqldump -u$myuser -p$mypass -S $socket"

for database in `$mycmd -e "show databases;" |  egrep -vi "mysql|perfor|infor|database" `

do

[ ! -e /opt/${database} ] && mkdir /opt/${database}

for table in `$mycmd -e "show tables from $database;" | sed '1d'`

do

$mydump $database $table | gzip > /opt/$database/${database}_${table}_$(date +%F).sql.gz

done

done


运维群:517751492

你可能感兴趣的:(mysql,数据库,恢复,还原,备恢)