定時備份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