以下示例均在鏡像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 //進入容器
mysql -uroot -p //進入數(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ù)
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
進入容器后執(zhí)行vim /etc/mysql/my.cnf嚼酝,如果報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
如果使用這個命令闻伶,導(dǎo)出的文件會有警告 ,在導(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)進入容器
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
三蓝翰、加入定時任務(wù)
用crontab添加定時器光绕,參考詳情 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 database"
docker exec database"
docker exec database > /
data_name:
data_dir
mv
database/data_date +%Y%m%d_%H:%M
.sql
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
database/data_date +%Y%m%d_%H:%M
.txt 845142388@qq.com
if [ data_dir/
time = "20:00" ]
then
echo -e "rap2備份文件" | mail -s 'rap2備份' -a 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 {} ;
以上代碼和之前的命令有些不一樣,之前的命令是直接生成到宿主機畜份,但不知為什么诞帐,直接執(zhí)行.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.添加定時任務(wù)
以下添加的是每分鐘執(zhí)行一次,可根據(jù)自己情況配置
crontab -e
* * * * * sh /home/cjj/mysql_test.sh 【.sh文件的位置】
*/15 * * * * sh /opt/cjj/rap2/rap2-delos-deploy/rap2_mysql_baskup.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 {} \;