MySQL数据库备份实例详解(4)

已经是我们要的结果 ,现在我们再次执行备份命令

[root@localhost tmp]# mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events --tab="/tmp/mc_orderdb" mc_orderdb Enter password: -- -- Position to start replication or point-in-time recovery from -- -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154; mysqldump: Got error: 1: Can't create/write to file '/tmp/mc_orderdb/order_cart.txt' (Errcode: 13 - Permission denied) when executing 'SELECT INTO OUTFILE'

结果还是权限被拒绝,无法写入,我们可以查询一下目录mc_orderdb的权限,

[root@localhost tmp]# ls -lh mc_orderdb/ total 4.0K -rw-r--r-- 1 root root 1.9K Jan 10 10:51 order_cart.sql

可以发现,是root用户建立的目录,我们需要修改其所属用户为mysql用户,然后再次执行备份命令

[root@localhost tmp]# chown mysql:mysql mc_orderdb [root@localhost tmp]# mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events --tab="/tmp/mc_orderdb" mc_orderdb Enter password: -- -- Position to start replication or point-in-time recovery from -- -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154; -- -- Dumping events for database 'mc_orderdb' -- -- -- Dumping routines for database 'mc_orderdb' -- [root@localhost tmp]#

可以发现,修改成功后即可备份成功

进入该目录下会发现mc_orderdb数据库下的每个表都有两种文件,一种.sql结尾记录是表结构,一种是.txt结尾的表数据

[root@localhost tmp]# cd mc_orderdb/ [root@localhost mc_orderdb]# ls order_cart.sql order_customer_addr.sql order_detail.sql order_master.sql region_info.sql shipping_info.sql warehouse_info.sql warehouse_proudct.sql order_cart.txt order_customer_addr.txt order_detail.txt order_master.txt region_info.txt shipping_info.txt warehouse_info.txt warehouse_proudct.txt mysqldump如何使用全备where参数 使用场景

假设我们要对订单id为1000到1050的主表进行修改,修改之前,我们需要先对数据进行备份,这里我们就可以使用where参数来完成此需求

执行命令进行备份 [root@localhost db_backup]# mysqldump -ubackup -p --master-data=2 --single-transaction --where "order_id>1000 and order_id<1050" mc_orderdb order_master > order_master_1000_1050.sql Enter password:

查看备份文件可以发现,订单id是从1001开始的

在日程工作中我们不可能一直手工备份,所以我们需要将备份进行脚本话,然后使用计划任务去执行脚本

定义备份脚本 脚本文件 #!/bin/bash ###############Basic parameters########################## DAY=`date +%Y%m%d` # 记录发生备份的当前日期 Environment=$(/sbin/ifconfig | grep "inet" | head -1 |grep -v "127.0.0.1" | awk '{print $2;}' ) # 当前主机的IP USER="backup" PASSWD="123456" HostPort="3306" MYSQLBASE="/home/mysql/" DATADIR="/home/db_backup/${DAY}" # 备份存放的目录(/home/db_backup目录下的以日期命名的子目录中) MYSQL=`/usr/bin/which mysql` # 定义mysql命令的目录 MYSQLDUMP=`/usr/bin/which mysqldump` # 定义mysqldump命令的目录 mkdir -p ${DATADIR} # 创建存储目录 # 定义备份函数,使用到上面定义的变量 Dump(){ ${MYSQLDUMP} --master-data=2 --single-transaction --routines --triggers --events -u${USER} -p${PASSWD} -P${HostPort} ${database} > ${DATADIR}/${Environment}-${database}.sql cd ${DATADIR} gzip ${Environment}-${database}.sql # 对文件进行了压缩 } # 利用for循环对当前服务器下的每一个数据库(排除了一些系统视图所在的数据库)分别来调用上面的Dump函数来进行备份 for db in `echo "SELECT schema_name FROM information_schema.schemata where schema_name not in ('information_schema','sys','performance_schema')" | ${MYSQL} -u${USER} -p${PASSWD} --skip-column-names` do database=${db} Dump done 执行脚本文件 [root@localhost home]# bash backup.sh mysql: [Warning] Using a password on the command line interface can be insecure. mysqldump: [Warning] Using a password on the command line interface can be insecure. mysqldump: [Warning] Using a password on the command line interface can be insecure. mysqldump: [Warning] Using a password on the command line interface can be insecure. mysqldump: [Warning] Using a password on the command line interface can be insecure. [root@localhost home]# cd db_backup/ [root@localhost db_backup]# ls 20190110 mc_orderdb.sql mc.sql order_master_1000_1050.sql order_master.sql [root@localhost db_backup]# cd 20190110/ [root@localhost 20190110]# ls 172.17.0.1-mc_orderdb.sql.gz 172.17.0.1-mc_productdb.sql.gz 172.17.0.1-mc_userdb.sql.gz 172.17.0.1-mysql.sql.gz

可以看到结果已备份,可以使用crontab命令定时执行此脚本

如何恢复mysqldump备份的数据库

方法一:

mysql -u -p dbname < backup.sql

方法二:

mysql> source /tmp/backup.sql

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1a2d340624be47f3124ea7a7b51e16e8.html