1. 程式人生 > >定時備份Mysql

定時備份Mysql

定時備份即是在Mysql的生產環境中啟動一個定時任務,每隔一段時間使用mysqldump工具執行一次備份。

1.建立shell指令碼

cd /home/joyulf/

mkdir mysql_data_back

touch /mysql_data_back/mysql.sh

vim /mysql_data_back/mysql.sh

在mysql.sh填入以下內容,根據實際情況進行修改

#!/bin/sh
cd /home/joyulf/mysql_data_back
echo "已切換到備份目錄,開始備份..."
mv bakmysql* /home/joyulf/mysql_data_back
echo "舊檔案已儲存到/home/joyulf/mysql_data_back"
Now=$(date +"%d-%m-%Y")
Mysqlpd="root"
File=bakmysql-$Now.sql.gz
echo "開始dump資料庫..."
mysqldump -uroot -p$Mysqlpd dms_erp | gzip > $File
echo "dump success!開始遠端複製..."
passwd="root"
# expect <<EOF
# spawn /usr/bin/scp $File 
[email protected]
:/usr/local/$File # expect { # "密碼:" # { # send "$passwd\n" # } # "pass" # { # send "$passwd\n" # } # "yes/no" # { # sleep 5 # send_user "send yes" # send "yes\n" # } # eof # { # sleep 5 # send_user "eof\n" # } # } # send "exit\r" # expect eof # EOF echo "複製全部完成!即將退出..."

sh mysql.sh備份報錯mysqldump執行時Got error: 1045: Access denied for user 'root'@'localhost' (using p時,

mysqldump執行時Got error: 1045: Access denied for user  'root'@'localhost' (using password: YES) when trying to connect

解決辦法

登入mysql客戶端

mysql -hserverip -uroot -p

mysql> use mysql;
Database changed

mysql> update user set password=password('new password') where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit

2.安裝crontab

crontab命令用來將crontab檔案提交給cron程序執行

yum install -y vixie-cron

yum install -y crontabs

yum install -y expect #用作自動密碼登入

等到操作完成。檢查是否已安裝:

$ service crond status
crond 已停

crond 啟動停止

啟動服務: service crond start 
關閉服務: service crond stop 
重啟服務: service crond restart 
重新載入配置:service crond reload 
檢視crontab服務狀態:service crond status
手動啟動crontab服務:service crond start
檢視crontab服務是否已設定為開機啟動,執行命令:ntsysv
沒有就加入開機自動啟動:免得每次手動啟動麻煩:chkconfig --level 35 crond on

3.建立定時任務

建立一個每晚2點執行一次mysql備份時程表:

 touch bakcron
 vi bakcron

加入一下內容,儲存退出。(或者直接執行crontab -e 進行編輯)

 0 2 * * * /bin/sh /home/joyulf/mysql.sh

/home/joyulf/mysql.sh為資料庫備份操作指令碼

4.執行定時任務

在命令列輸入

crontab bakcron

   
檢視/var/spool/cron目錄,可以看到有檔名為使用者名稱的檔案。

"crontab -l" 檢視定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron指令碼
 

rsync 無密碼 傳輸

現在我們來設定ssh,以便在執行ssh操作時不需要密碼,使用ssh-keygen在本地生成公鑰和私鑰。

$ ssh-keygen
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

提示:當提示輸入密碼時,只需輸入兩次回車鍵,不指配密碼字元。

3.使用ssh-copy-id將公匙拷貝至遠端主機

執行ssh-copy-id,將通過ssh-keygen生成的公匙拷貝至遠端主機。

ssh-copy-id -i ~/.ssh/id_rsa.pub 10.19.3.13

提示:執行以上操作時,將會提示輸入遠端主機帳戶和密碼,然後就會自動將公匙拷貝至遠端目錄。

無需密碼通過ssh來執行rsync

現在,你可以不需要密碼就可以ssh連線到遠端主機

ssh 10.19.3.13

退出 exit

重新來執行rsync,現在應該就不會提示輸入密碼了

rsync -avzt /home/mysql_data_back/dms_erp/mysql_back [email protected]:/home/joyulf/mysql_data_back/rsync