資料卷的備份與恢復-備份-
注: -v指定資料卷時,如果資料卷不存在則自動建立。
1.使用nginx基礎映象新啟動一個名為nginx的容器,-v指定資料卷名為web並掛載到nginx容器的/mnt/web目錄
[root@localhost ~]# docker run -itd --name nginx -v web:/mnt/web nginx3e99025339a4600ae7f607fbaafaff9f36bdf8d8533aaa441a42103be4260de5[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3e99025339a4 nginx "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 80/tcp nginx[root@localhost ~]# docker volume lsDRIVER VOLUME NAMElocal web //可以看到web資料卷自動建立
2.在名為nginx的容器中新增資料
可以進入nginx容器中新增,也可以直接使用docker命令新增資料。
[root@localhost ~]# docker exec -it nginx mkdir /mnt/web/test[root@localhost ~]# docker exec -it nginx touch /mnt/web/data.txt[root@localhost ~]# docker exec -it nginx ls /mnt/webdata.txt test //可以看到新增的資料夾與文字檔案
3.資料卷備份
命令詳解:
使用nginx基礎映象新建一個臨時的容器(不放入後臺執行),資料共享容器nginx的資料卷web,並且-v 指定將本機的/root/test目錄掛載到臨時容器的/backup目錄,執行備份命令將臨時容器的/mnt/web目錄打包壓縮到/backup目錄下名為web.tar的備份檔案(因為資料卷web掛載到了nginx容器的/mnt/web目錄,而臨時容器又共享了nginx容器的資料卷web,所以直接打包容器的/mnt/web目錄即可) (因為本機的/root/test目錄掛載到了臨時容器的/backup目錄,所以可以直接在本機的/root/test目錄中查詢備份檔案web.tar即可)
[root@localhost ~]# docker run -it --volumes-from nginx -v /root/test:/backup nginx tar cvf /backup/web.tar /mnt/webtar: Removing leading `/' from member names/mnt/web//mnt/web/test//mnt/web/data.txt[root@localhost ~]# ll -h /root/test/總用量 357M-rw-r--r-- 1 root root 10K 5月 13 02:29 web.tar //備份資料
-恢復-
1.用nginx基礎映象新啟動一個帶有空資料卷webdata的容器nginxback
[root@localhost ~]# docker run -itd --name nginxback -v webdata:/mnt/web nginx33149ce377ae168d09f69227c8216db731e24593db7f57f0cca594d011a7c9c9[root@localhost ~]# docker volume lsDRIVER VOLUME NAMElocal weblocal webdata //自動建立的新資料卷(用於恢復資料)[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES33149ce377ae nginx "nginx -g 'daemon of…" 3 seconds ago Up 1 second 80/tcp nginxback3e99025339a4 nginx "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes 80/tcp nginx
2.資料卷恢復
命令詳解:
使用nginx基礎映象新建一個臨時的容器(不放入後臺執行),資料共享容器nginxback的資料卷webdata(作用是將web.tar檔案資料恢復至資料卷webdata),並且-v 指定將本機的/root/test目錄掛載到臨時容器的/backup目錄,所以直接執行恢復命令將臨時容器的/backup目錄下名為web.tar的備份檔案恢復至nginxback容器的資料卷webdata中 。
[root@localhost ~]# docker run -it --volumes-from nginxback -v /root/test:/backup nginx tar xvf /backup/web.tarmnt/web/mnt/web/test/mnt/web/data.txt[root@localhost ~]# docker volume lsDRIVER VOLUME NAMElocal weblocal webdata[root@localhost ~]# docker exec -it nginx ls /mnt/web data.txt test //原始資料容器nginx中的資料(資料卷web)[root@localhost ~]# docker exec -it nginxback ls /mnt/webdata.txt test //備份資料卷恢復後的nginxback容器中的資料(資料卷webdata)
3.為了驗證web資料卷備份恢復到webdata資料卷的資料,再啟動一個新容器掛載webdata資料卷檢視資料
[root@localhost ~]# docker run -itd --name webtest -v webdata:/mnt/web nginx60e73b319aff246ac2d1debca13b1d7581a056d8a13a9c508ae614f4a58273a5 //啟動新容器webtest,並且-v將webdata資料卷掛載到容器/mnt/web目錄[root@localhost ~]# docker exec -it webtest ls /mnt/webdata.txt test //檢視容器webtest中的資料
Mysql容器資料卷的備份與恢復問題???
問題:
使用上面nginx資料卷備份恢復的方法對mysql容器資料捲進行備份與恢復,在備份與恢復的過程都能夠看到新建的test庫,但是恢復之後資料庫中就是沒有test庫,不知道是什麼問題?有懂的大佬解答一下,萬分感謝!!!
實驗過程:1.使用mysql基礎映象新啟動一個mysql4容器,-v指定資料卷名為mysql並掛載到mysql4容器的/var/lib/mysql目錄,-e設定mysql4容器資料庫密碼為123。
[root@localhost ~]# docker run -itd --name mysql4 -v mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql //啟動mysql4容器,-v指定資料卷mysql掛載到/var/lib/mysql目錄,-e設定密碼[root@localhost ~]# docker volume ls //檢視建立的資料卷DRIVER VOLUME NAMElocal mysql[root@localhost ~]# docker ps //檢視執行的mysql4容器CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES7632976b82d4 mysql "docker-entrypoint.s…" 6 hours ago Up 6 hours 3306/tcp, 33060/tcp mysql4
2.進入mysql4容器並建立新庫test
[root@localhost ~]# docker exec -it mysql4 /bin/bashroot@7632976b82d4:/# mysql -uroot -p123...mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4 rows in set (0.68 sec)mysql> create database test; //建立test庫Query OK, 1 row affected (0.24 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys || test |+--------------------+5 rows in set (0.01 sec)
3.資料卷mysql備份
命令詳解:
使用mysql基礎映象新建一個臨時的容器(不放入後臺執行),資料共享容器mysql4的資料卷mysql,並且-v 指定將本機的/root/test目錄掛載到臨時容器的/backup目錄,執行備份命令將臨時容器的/var/lib/mysql目錄打包壓縮到/backup目錄下名為test.tar的備份檔案(因為資料卷mysql掛載到了mysql4容器的/var/lib/mysql目錄,而臨時容器又共享了mysql4容器的資料卷mysql,所以直接打包容器的/var/lib/mysql目錄即可) (因為本機的/root/test目錄掛載到了臨時容器的/backup目錄,所以可以直接在本機的/root/test目錄中查詢備份檔案test.tar即可)
[root@localhost ~]# docker stop mysql4mysql4[root@localhost ~]# docker run -it --volumes-from mysql4 -v /root/test:/backup mysql tar cvf /backup/test.tar /var/lib/mysqltar: Removing leading `/' from member names/var/lib/mysql//var/lib/mysql/ibdata1/var/lib/mysql/ib_logfile1/var/lib/mysql/#ib_16384_0.dblwr/var/lib/mysql/#ib_16384_1.dblwr.../var/lib/mysql/1d90619790ec.err/var/lib/mysql/binlog.000001/var/lib/mysql/binlog.000002/var/lib/mysql/test//var/lib/mysql/binlog.000003/var/lib/mysql/binlog.000004/var/lib/mysql/binlog.000005/var/lib/mysql/binlog.000006/var/lib/mysql/binlog.000007/var/lib/mysql/binlog.000008/var/lib/mysql/binlog.index/var/lib/mysql/ib_buffer_pool[root@localhost ~]# ll -h /root/test/ //檢視備份檔案總用量 172M-rw-r--r-- 1 root root 172M 5月 12 22:38 test.tar
4.資料卷恢復
[root@localhost ~]# docker run -itd --name mysql_back -v mysqltest:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql246f59e233116c3b0e8a8d041f3ca7b4b5096ca170ebb0e2fac586236c92d4b7 //啟動新容器mysql_back,將空資料卷mysqlback掛載至容器的/var/lib/mysql目錄[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES246f59e23311 mysql "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 3306/tcp, 33060/tcp mysql_back[root@localhost ~]# docker volume lsDRIVER VOLUME NAMElocal mysqllocal mysqlback[root@localhost ~]# docker run -it --volumes-from mysql_back -v /root/test:/backup mysql tar xvf /backup/test.tar -C /var/lib/mysqlvar/lib/mysql/var/lib/mysql/ibdata1var/lib/mysql/ib_logfile1var/lib/mysql/#ib_16384_0.dblwrvar/lib/mysql/#ib_16384_1.dblwrvar/lib/mysql/undo_001var/lib/mysql/undo_002var/lib/mysql/ib_logfile0var/lib/mysql/#innodb_temp/var/lib/mysql/#innodb_temp/temp_1.ibtvar/lib/mysql/#innodb_temp/temp_2.ibtvar/lib/mysql/#innodb_temp/temp_3.ibtvar/lib/mysql/#innodb_temp/temp_4.ibtvar/lib/mysql/#innodb_temp/temp_5.ibtvar/lib/mysql/#innodb_temp/temp_6.ibtvar/lib/mysql/#innodb_temp/temp_7.ibtvar/lib/mysql/#innodb_temp/temp_8.ibtvar/lib/mysql/#innodb_temp/temp_9.ibt...var/lib/mysql/test/ ------》可以看到恢復的時候有test庫var/lib/mysql/binlog.000003var/lib/mysql/binlog.000004var/lib/mysql/binlog.000005var/lib/mysql/binlog.000006var/lib/mysql/ib_buffer_poolvar/lib/mysql/ibtmp1var/lib/mysql/binlog.000007var/lib/mysql/binlog.index[root@localhost test]# docker exec -it mysql_back /bin/bashroot@2ffefb7516b9:/# mysql -uroot -p123 //檢視新容器mysql_back進行資料卷恢復後資料庫中的資料...mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys | ----》資料庫中無test庫????+--------------------+4 rows in set (0.07 sec)root@8fff18326739:/# ls /var/lib/mysql/'#ib_16384_0.dblwr' auto.cnf ca.pem ib_logfile1 performance_schema sys'#ib_16384_1.dblwr' binlog.000001 client-cert.pem ibdata1 private_key.pem test'#innodb_temp' binlog.000002 client-key.pem ibtmp1 public_key.pem undo_001 509ca1ee2a1b.err binlog.index ib_buffer_pool mysql server-cert.pem undo_002 8fff18326739.err ca-key.pem ib_logfile0 mysql.ibd server-key.pem var
如果你覺得這篇文章還不錯,就請動動你的發財手為本文點贊-評論-轉發吧,因為這將是我持續輸出更多優質文章的最強動力,謝謝!