docker 中mysql備份

以下示例均在鏡像mysql:5.7.22基礎(chǔ)上應(yīng)用

一、備份mysql

1.創(chuàng)建容器testmysql

docker run -p 3307:3306 --name testmysql -e MYSQL_ROOT_PASSWORD=12345 -d mysql:5.7.22

2.創(chuàng)建數(shù)據(jù)庫test、數(shù)據(jù)表test1

docker exec -it testmysql /bin/bash //進(jìn)入容器

mysql -uroot -p //進(jìn)入數(shù)據(jù)庫

show databases; //查詢數(shù)據(jù)庫
create database test; // 創(chuàng)建名為test數(shù)據(jù)庫
use test;//切換到數(shù)據(jù)庫 test
create table test (id int);//創(chuàng)建名為test的數(shù)據(jù)表
insert into test (id) values (1); //插入一條數(shù)據(jù)
添加數(shù)據(jù)

2.mysqldump 備份

導(dǎo)出命令1(建議使用此命令)

docker exec -it mysql_server【docker容器名稱/ID】 mysqldump --defaults-extra-file=/etc/mysql/my.cnf test_db【數(shù)據(jù)庫名稱】 > /opt/sql_bak/test_db.sql【導(dǎo)出表格路徑】

(1)修改/etc/mysql/my.cnf文件

vim /etc/mysql/my.cnf

[mysqldump]
user=your_backup_user_name
password=your_backup_password
image.png

進(jìn)入容器后執(zhí)行vim /etc/mysql/my.cnf,如果報(bào)bash: vim: command not found
在容器內(nèi)執(zhí)行以下代碼下載vim即可

apt-get update
apt-get install vim

修改后,exit退出容器,重啟以下容器 docker restart testmysql【容器名稱/id】

執(zhí)行導(dǎo)出命令

docker exec -it testmysql mysqldump --defaults-extra-file=/etc/mysql/my.cnf test > /home/iotdev/cjj/test.sql

導(dǎo)出命令2
docker exec -it mysql_server【docker容器名稱/ID】 mysqldump -uroot -p12345【數(shù)據(jù)庫密碼】 test_db【數(shù)據(jù)庫名稱】 > /opt/sql_bak/test_db.sql【導(dǎo)出表格路徑】

docker exec -it testmysql mysqldump -p12345 test > /home/iotdev/cjj/test.sql

如果使用這個(gè)命令,導(dǎo)出的文件會(huì)有警告 ,在導(dǎo)入的時(shí)候報(bào)這個(gè)錯(cuò)誤,需要把警告刪除再導(dǎo)入


導(dǎo)入

二、導(dǎo)入備份

1.創(chuàng)建容器testmysql1

docker run -p 3308:3306 --name testmysql1 -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7.22

2.導(dǎo)入命令

(1)先將文件導(dǎo)入到容器

docker cp **.sql 【容器名】:/root/

(2)進(jìn)入容器

docker exec -ti 【容器名/ID】/bin/bash

(3)創(chuàng)建數(shù)據(jù)庫

mysql -uroot -p
create database test

(4)將文件導(dǎo)入數(shù)據(jù)庫

 mysql -uroot -p 【數(shù)據(jù)庫名】 < ***.sql

三、加入定時(shí)任務(wù)
用crontab添加定時(shí)器,參考詳情 https://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

1.添加myql_test.sh文件

#!/bin/bash

data_name="rap2-mysql-new"
data_dir="/mysql_data/rap2-new"
database="RAP2_DELOS_APP"
time="date +%H:%M"
docker exec data_name sh -c "rm -rf /database"
docker exec data_name sh -c "mkdirdatabase"
docker exec data_name sh -c "mysqldump -uroot -pfewsdkjk13_ --databasesdatabase > /database/data_`date +%Y%m%d_%H:%M`.txt" docker cpdata_name:database/data_dir

mv data_dir/database/data_date +%Y%m%d_%H:%M.sql data_dir/database/data_date +%Y%m%d_%H:%M.txt

將備份文件發(fā)送到郵箱 數(shù)據(jù)量小的情況下 服務(wù)器需要安裝 yum install mailx 并配置 yum install sharutils

修改 vi /etc/mail.rc

添加以下配置

set from=shenjianyu@thinktrader.net smtp=smtp.exmail.qq.com

set smtp-auth-user=shenjianyu@thinktrader.net smtp-auth-password=郵箱密碼

set smtp-auth=login

echo -e "rap2備份文件" | mail -s 'rap2備份' -a data_dir/database/data_date +%Y%m%d_%H:%M.txt 845142388@qq.com

if [ time = "12:00" ] then echo -e "rap2備份文件" | mail -s 'rap2備份' -adata_dir/database/data_`date +%Y%m%d_%H:%M`.txt 845142388@qq.com fi if [time = "20:00" ]
then
echo -e "rap2備份文件" | mail -s 'rap2備份' -a data_dir/database/data_date +%Y%m%d_%H:%M.txt chenjiajun@cmiot.chinamobile.com
fi
find $data_dir -mtime +7 -name 'data_*.txt' -exec rm -rf {} ;

以上代碼和之前的命令有些不一樣,之前的命令是直接生成到宿主機(jī),但不知為什么,直接執(zhí)行.sh文件是可以正常生成文件的,但使用定時(shí)器生成的文件內(nèi)容是空的,求大神答疑解惑。

問題代碼如下:

#!/bin/bash
data_dir="/home/iotdev/cjj/"
docker exec -it testmysql mysqldump -uroot -p12345 test > "$data_dir/data_`date +%Y%m%d_%H:%M`.sql"
2.添加定時(shí)任務(wù)

以下添加的是每分鐘執(zhí)行一次,可根據(jù)自己情況配置

crontab -e
* * * * * sh /home/cjj/mysql_test.sh 【.sh文件的位置】

*/15 * * * * sh /opt/cjj/rap2/rap2-delos-deploy/rap2_mysql_baskup.sh

四、添加腳本,刪除時(shí)間太久的文件

// 刪除60分鐘前的文件
find $data_dir$container_dir -amin +60 -name 'data_*.sql' -exec rm -rf {} \; 

//刪除7天前的數(shù)據(jù)
find $data_dir$container_dir -mtime +7 -name 'data_*.sql' -exec rm -rf {} \; 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容