mysql怎么远程备份 mysql远程备份数据库脚本( 二 )


--to-last-log:代表mysqlbinlog不仅能够获取指定的binlog,还能获取其后生成的binlog , 获取完了,才终止 。如果指定了--stop-never选项则会隐式打开--to-last-log选项 。
--result-file:用于设置远程服务器的binlog,保存到本地的前缀 。譬如对于mysql-bin.000001,如果指定--result-file=/test/backup-,则保存到本地后的文件名为/test/backup-mysql-bin.000001 。注意:如果将--result-file设置为目录,则一定要带上目录分隔符“/” 。譬如--result-file=/test/,而不是--result-file=/test , 不然保存到本地的文件名为/testmysql-bin.000001 。
不足:
这个方式有个问题,对于常规的主从复制来说,如果主从直接的连接断开了 , 则从会自动再次连接,而对于mysqlbinlog,如果断开了 , 并不会自动连接 。
解决方案:
可通过脚本来弥补上述不足
#!/bin/sh
BACKUP_BIN=/usr/bin/mysqlbinlog
LOCAL_BACKUP_DIR=/backup/binlog/
BACKUP_LOG=/backup/binlog/backuplog
REMOTE_HOST=192.168.244.145
REMOTE_PORT=3306
REMOTE_USER=repl
REMOTE_PASS=repl
FIRST_BINLOG=mysql-bin.000001
#time to wait before reconnecting after failure
SLEEP_SECONDS=10
##create local_backup_dir if necessary
mkdir -p ${LOCAL_BACKUP_DIR}
cd ${LOCAL_BACKUP_DIR}
## 运行while循环,连接断开后等待指定时间,重新连接
while :
do
if [ `ls -A "${LOCAL_BACKUP_DIR}" |wc -l` -eq 0 ];then
LAST_FILE=${FIRST_BINLOG}
else
LAST_FILE=`ls -l ${LOCAL_BACKUP_DIR} | grep -v backuplog |tail -n 1 |awk '{print $9}'`
fi
${BACKUP_BIN} --raw --read-from-remote-server --stop-never --host=${REMOTE_HOST} --port=${REMOTE_PORT} --user=${REMOTE_USER} --password=${REMOTE_PASS} ${LAST_FILE}
echo "`date +"%Y/%m/%d %H:%M:%S"` mysqlbinlog停止,返回代码:$?" | tee -a ${BACKUP_LOG}
echo "${SLEEP_SECONDS}秒后再次连接并继续备份" | tee -a ${BACKUP_LOG}
sleep ${SLEEP_SECONDS}
done
脚本解读:
1. 实际上定义了一个死循环,如果备份失败,则10s后重新连接 。
2. 第一次运行时需指定FIRST_BINLOG的值,指从哪个binlog开始复制,一般为mysql-bin.000001 。后续执行的时候就直接获取备份目录下最新的binlog,从最新的binlog开始复制 。
总结:
1. 如果指定了--raw,mysqlbinlog获取事件后,并不会实时落盘,而是先保存在本地服务器的内存中,每4K刷盘一次 。这也就减少了频繁的日志写操作 。如果此时mysqlbinlog和主服务器之间的连接断开了,则内存中的binlog会马上刷新到磁盘中 。
2. 尽管mysqlbinlog类似于从服务器 , 但从服务器上的relaylog却是实时存盘的,即从服务器获取主服务器产生的事件后,会实时写入到relaylog中 。
3. 如果不指定--raw , 这个时候会以文本格式存盘,此时 , --result-file=/test/不能指定为目录 , 必须明确写上文件名,譬如--result-file=/test/1.sql,此时,mysqlbinlog获取事件后,是实时落盘的 , 不会每4K刷盘一次 。
怎么来实现远程服务器的Mysql数据库备份和恢复?你可以登录进去,然后在“任务”中选择“备份”,之后选择备份的路径,就可以了!数据库恢复就是点击“还原” , 然后按提示操作即可 。
请问怎么远程备份mysql数据库到本地提供备份mysql怎么远程备份的本地2种方法:
命令行备份到服务器上下载到本地mysql怎么远程备份;
通过客户端工具将mysql备份并同步下载到本地或者查询导出到本地;
mysql的本地备份和双机相互备份脚本先修改脚本进行必要的配置 然后以root用户执行第一执行远程备份时先用 first参数本地备份用local参数 远程备份不用参数 注意1 注意:需要在另一主机上的Mysql用户用添加用户需要配置的地方: # define host and mysql passwordREMOTE_HOST= #远程主机名或IPREMOTE_PASSWORD= #远程主机的mysql中的root@本地主机 密码 # define database pathDB_PATH= /var/lib/mysql #本地mysql数据库路径LOCAL_PASSWORD= #本地mysql root用户密码DB_BACKUP_PATH= /root/db_bk #本地备份时数据保存的路径NO_BACKUP_DB= 设置本地数据库中不想备份的数据库名 用空格隔开直接下载 #!/bin/sh# mysqldump_all sh# this scripts is used to backup MySQL database beten tow MySQL SERVER!# define host and mysql passwordREMOTE_HOST= REMOTE_PASSWORD= # define database pathDB_PATH= /var/lib/mysql LOCAL_PASSWORD= DB_BACKUP_PATH= /root/db_bk # define which database no back up write db anme escap whit space!# example;# NO_BACKUP_DB= yns test ps_note # this said that if db name is yns or test or ps_note then not backup them!NO_BACKUP_DB= # get the database name and process one by oneecho Start to Backup ;#ls /var/lib/mysql/tmp/mydb allif [ $ != help ]; thenfor db in `ls $DB_PATH`; doif_backup= if [ d $DB_PATH/$db ] ; thenfor noBackDB in $NO_BACKUP_DB ; doif ( test $db = $noBackDB ); then#echo n ;if_backup= ;fidoneif [ $if_backup ]; thencase $ infirst)echo n Crate db [ $db ] on $REMOTE_HOST first! result=`mysqladmin h $REMOTE_HOST password=$REMOTE_PASSWORD create $db`if [ ! $result ]; thenecho Done! ;elseecho Fialed! check your configure plz! ;echo Remote host said: $result ;exitfi;;local)# back up to localhost dir if [ ! d $DB_BACKUP_PATH ]; thenmkdir $DB_BACKUP_PATHfiecho n [ $db ] Backup to local$DB_BACKUP_PATH with gzip ;if [ e $DB_BACKUP_PATH/$db gz ]; thenmv $DB_BACKUP_PATH/$db gz $DB_BACKUP_PATH/$db gz;fimysqldump password=Walte#Ming $db | gzip$DB_BACKUP_PATH/$db gzecho [OK] ;;*)# Do mon Backup!echo n [ $db ] Do Backup! ==== $REMOTE_HOST/$db ;mysqldump add drop table $db password=$LOCAL_PASSWORD | mysql h $REMOTE_HOST password=$REMOTE_PASSWORD $dbecho [OK] ;esacelseecho [ $db ] ;echo ***This database set to Not backup! Operation CANCELED! ;fielseecho [ $db ] ;echo ***Warning! Not a DataBbase Backup Canceled*** ;fidoneelseecho Usage: mysqldupm_all sh [firs|local|help] ;echo Some question ask for mailto: ;;fi# Ended all backup opretion!echo ;echo Note: if there is e wrong message white MySQLyou should check yourconfigure first! ;exit lishixinzhi/Article/program/MySQL/201311/29339

推荐阅读