1. 程式人生 > >docker實戰篇1:mysql應用

docker實戰篇1:mysql應用

     我們這裡先aliyun205這臺伺服器上通過docker建立一個mysql5.7的資料庫,然後在該資料上存放一些測試資料,模擬備份打包為tar.gz檔案。最後在VM_190_147_centos這臺伺服器上把打包的資料庫通過docker映象恢復出來。

1、通過docker構建mysql5.7資料庫

1、拉取映象

[[email protected] ~]# docker pull mysql:5.7.24

2、常見目錄

[[email protected] ~]# mkdir -p /opt/mysql3306/{conf,logs,data}

3、啟動容器

[[email protected] ~]# docker run -it -d -p 3306:3306 --name=mysql --mount type=bind,src=/opt/mysql3306/conf,dst=/etc/mysql --mount type=bind,src=/opt/mysql3306/logs,dst=/var/log/mysql --mount type=bind,src=/opt/mysql3306/data,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7.24
e3560ae32aec1ad87b336f8aef0a2bab3c7b75fa182f0d1882846921de85de66

【說明】我們使用--mount掛載點的方式指定目錄,對這些掛載點說明

(1)--mount type=bind,src=/opt/mysql3306/conf,dst=/etc/mysql 將主機當前目錄下的conf掛載到容器的/etc/mysql;

(2) --mount type=bind,src=/opt/mysql3306/logs,dst=/var/log/mysql將主機當前目錄下的logs目錄掛載到容器的/var/log/mysql;

(3)--mount type=bind,src=/opt/mysql3306/data,dst=/var/lib/mysql 將主機當前目錄下的data目錄掛載到容器的/var/lib/mysql;

(4)-e MYSQL_ROOT_PASSWORD=123456 指定資料庫的初始化密碼。

【引數說明:】
(1)-e MYSQL_USER="woniu"  :新增woniu使用者;
(2)-e MYSQL_PASSWORD="123456":設定新增的使用者密碼;
(3)-e MYSQL_ROOT_PASSWORD="123456":設定root使用者密碼;
(4)--character-set-server=utf8:設定字符集為utf8;
(5)--collation-server=utf8_general_cli:設定字元比較規則為utf8_general_cli。
(6)--privileged=true:容器內的root擁有真正root許可權,否則容器內root只是外部普通使用者許可權;
(7)-v /docker/mysql/conf/my.cnf:/etc/my.cnf:對映配置檔案

2、備份資料

1、模擬資料

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '張三', '10');
INSERT INTO `user` VALUES ('2', '李四', '20');
INSERT INTO `user` VALUES ('3', '王五', '30');

2、這裡模糊docker掛掉了

[[email protected] ~]# docker stop  mysql
mysql

3、進入/opt/mysql3306目錄,使用tar -zcvf命令打包,壓縮包就是我們備份的資料
 

[[email protected] opt]# cd /opt/mysql3306/
[[email protected] mysql3306]# tar -zcvf backup.tar.gz ./

3、恢復資料

VM_190_147_centos這臺伺服器上已經有了相同版本的docker映象,且我們把對應目錄為/data/mysql3306/,並把上一步驟轉給你備份檔案方在該目錄。

[[email protected]_190_147_centos ~]# cd /data/mysql3306/
[[email protected]_190_147_centos mysql3306]# ll
total 7072
-rw-r--r-- 1 root root 7239684 Dec  7 10:17 backup.tar.gz

在/data/mysql3306目錄下解壓縮備份檔案

[[email protected]_190_147_centos mysql3306]# tar -zxvf backup.tar.gz 
[[email protected]_190_147_centos mysql3306]# ll
total 7084
-rw-r--r-- 1 root    root     7239684 Dec  7 10:17 backup.tar.gz
drwxr-xr-x 2 root    root        4096 Dec  7 10:06 conf
drwxr-xr-x 6 polkitd ssh_keys    4096 Dec  7 10:14 data
drwxr-xr-x 2 root    root        4096 Dec  7 10:06 logs

啟動容器

[[email protected]_190_147_centos ~]# docker run -it -d --name=mysql -p 3306:3306 --mount type=bind,src=/data/mysql3306/conf,dst=/etc/mysql --mount type=bind,src=/data/mysql3306/logs,dst=/var/log/mysql --mount type=bind,src=/data/mysql3306/data,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.24
fe231cfb5ef36b2e5d5dd019c8d8b734d6d236d47877216b6a38e6de37db0393

檢查資料是否存在

[email protected]_190_147_centos ~]# docker ps
[[email protected]_190_147_centos ~]# docker exec -it mysql bash
[email protected]:/# mysql -uroot -p123456
mysql> use wzy;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from user;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | ??   |   10 |
|  2 | ??   |   20 |
|  3 | ??   |   30 |
+----+------+------+
3 rows in set (0.00 sec)