mysql 컨테이너를 hostos에 백업해보자

5312 단어 dockerdocker

docker volume이란?
host to container -> host의 특정 dir.와 container의 특징 dir.을 연결(mount)한다
활용방안
-목적? 데이터 이동 -> backup
-mariaDB container -> /var/lib/mysql -> backup(host.dir) -> NFS -> 자동 백업서버로 이전
-web(nginx, apache, httpd) -> log(access.log, error.log), index.html )

볼륨은 원하는만큼 걸 수 있다!!

1)bind mount : os의 mount 기법과 유사 -> -v host.dir:container.dir
--사용자가 지정하는 영역에서 관리

바인드 마운트로 지정된 host.dir 이나 container.dir이 없으면 자동생성된다

볼륨 설정명령어
-v 호스트디렉터리:컨테이너디렉터리

그러면 한번 시작해보자

1.볼륨 옵션을 줘서 container 실행
mysql에 설정파일들은 /var/lib/mysql에 저장되므로
볼륨을 다음과 같이 설정해줘야 한다!
(-v /root/kevin/mysql-volume:/var/lib/mysql)

root@hostos1:~# docker run -itd --name=vtest-mysql -e MYSQL_ROOT_PASSWORD=pass123 \
> -e MYSQL_DATABASE=dockerdb \
> -v /root/kevin/mysql-volume:/var/lib/mysql \
> mysql:5.7
cd7ebecd46428eddc3c930d959e097b00d698982e591bc8e7c0bf76c5709b4ee

2.실행하고 데이터베이스에 테이블을 생성 데이터를 저장해보자

root@hostos1:~# docker exec -it vtest-mysql bash
root@cd7ebecd4642:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dockerdb           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql> use dockerdb;
Database changed


mysql> create table t1(c1 int, c2 varchar(10));
Query OK, 0 rows affected (0.07 sec)

mysql> insert into t1 values (10,'docker');
Query OK, 1 row affected (0.06 sec)

3.저장한 정보 확인

mysql> select * from t1
    -> ;
+------+--------+
| c1   | c2     |
+------+--------+
|   10 | docker |
+------+--------+
1 row in set (0.00 sec)

mysql> exit
Bye

4.컨테이너에 mysql에서 입력한 정보가 존재하는지 확인

root@cd7ebecd4642:/# ls -l /var/lib/mysql/dockerdb/
total 112
-rw-r----- 1 mysql mysql    65 Aug 11 03:08 db.opt
-rw-r----- 1 mysql mysql  8582 Aug 11 03:09 t1.frm
-rw-r----- 1 mysql mysql 98304 Aug 11 03:09 t1.ibd
생성한 테이블과 입력한 정보가 있다!

5.컨테이너와 연결한 hostos 디렉터리에 파일이 정상적으로 있는지 확인

root@hostos1:~# ls -l /root/kevin/mysql-volume/dockerdb/
total 112
-rw-r----- 1 999 docker    65  8월 11 12:08 db.opt
-rw-r----- 1 999 docker  8582  8월 11 12:09 t1.frm
-rw-r----- 1 999 docker 98304  8월 11 12:09 t1.ibd

6.일단 컨테이너를 삭제해보자

root@hostos1:~# docker rm -f vtest-mysql

7.삭제후 컨테이너와 연결되었던 hostos 디렉터리 확인

root@hostos1:~/kevin# cd mysql-volume/
root@hostos1:~/kevin/mysql-volume# ls
auto.cnf    client-cert.pem  ib_buffer_pool  ib_logfile1  performance_schema  server-cert.pem
ca-key.pem  client-key.pem   ibdata1         ibtmp1       private_key.pem     server-key.pem
ca.pem      dockerdb         ib_logfile0     mysql        public_key.pem      sys

컨테이너를 삭제해도 볼륨은 그대로 존재

8.다시 컨테이너 생성

root@hostos1:~/kevin/mysql-volume# docker run -itd --name=vtest-mysql -e MYSQL_ROOT_PAS
SWORD=pass123 -e MYSQL_DATABASE=dockerdb -v /root/kevin/mysql-volume:/var/lib/mysql mysql:5.7

9.확인

root@hostos1:~/kevin/mysql-volume# docker exec -it vtest-mysql bash

root@b1f0fba7cddb:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2


docker_db 있는것 확인
mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| dockerdb           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)


mysql> use dockerdb;

테이블이 그대로 존재하는 것 확인
mysql> show tables;
+--------------------+
| Tables_in_dockerdb |
+--------------------+
| t1                 |
+--------------------+
1 row in set (0.00 sec)

테이블 데이터 확인
mysql> select * from t1
    -> ;
+------+--------+
| c1   | c2     |
+------+--------+
|   10 | docker |
+------+--------+
1 row in set (0.00 sec)

새로 생성한 컨테이너에서 따로 테이블을 만들지 않았는데 테이블이 생성되있고 그안에 데이터도 그대로 있다!!

삭제된 컨테이너의 볼륨을 재사용하게 되면
자동으로 데이터베이스의 모든 데이터가 연결된다!! --> 데이터 영속성(지속성) --> 주요 데이터 보호

+++
그렇다면 한번 mysql 과 연결한 호스트 서버의 볼륨을 압축하여 백업서버로 보내보자

1.먼저 볼륨 디렉터리를 압축

tar cvzf mysql_$(date '+%Y+%m+%d+%A').tar.gz /root/kevin/mysql-volume

2.압축한 파일 확인

root@hostos1:~/kevin# ls
mysql_2021-08-11-수요일.tar.gz  mysql-volume

3.scp를 통해 백업서버로 전송

root@hostos1:~/kevin# scp mysql_2021-08-11-수요일.tar.gz hostos2:/BACKUP/DB_backup

4.백업서버에 전송 확인

root@hostos2:~# cd /BACKUP/DB_backup/
root@hostos2:/BACKUP/DB_backup# ls
mysql_2021-08-11-수요일.tar.gz

mysql 컨테이너 디렉터리를 hostos 디렉터리와 연결하였고 mysql의 정보를 압축하여 백업서버로 보내는데 성공하였다!!!

좋은 웹페이지 즐겨찾기