===============================================
2018/7/1_第1次修改 ccb_warlock
===============================================
mysql作為常用的關系型數據庫和項目的關系非常緊密。由於經常需要搭建臨時的mysql服務,而臨時搭建時大多只是為了臨時查點數據,而正常yum或apt-get的方式安裝需要下載大量的時間,且還需要從虛擬機快照的角度進行回滾清理環境。故最近嘗試了使用docker快速部署,感覺對於非壓力負載環境通過docker方式非常輕便,且清理干凈。
由於技術能力和公司業務所限,沒有嘗試過容器mysql的負載能力,按照一些反饋的說法自己搭建mysql容器的性能遠遠不如雲服務器廠商提供的mysql服務(這里我的理解是個人僅僅是搭了mysql容器但是沒有做各方面的優化,性能遠遠無法滿足生產環境的要求),所以容器部署mysql僅僅只是研發內部使用,沒有足夠的能力做優化還是不要急着上生產環境。
mysql默認是關閉遠程訪問,最近沒時間試驗部署直接開機遠程訪問,目前的教程還需要連到mysql容器內部去進行配置,后期有空我會將缺失的內容補上。
一、前提條件
- 環境中已經部署了docker swarm(http://www.cnblogs.com/straycats/p/8978135.html)
- 最好也部署了portainer(http://www.cnblogs.com/straycats/p/8978201.html)
- 默認部署的服務器IP:192.168.12.11
- 默認swarm創建了network:myswarm-net
二、部署mysql容器(5.6)
2.1 創建映射目錄
mkdir -p /usr/docker-vol/mysql/data
2.2 配置mysql-stack.yml
# 編輯mysql-stack.yml
vi /root/mysql-stack.yml
# 添加下面的內容到mysq-stack.yml中,wq保存
version: '3.6' services: mysql: image: mysql:5.6.40 environment: # 設置時區為Asia/Shanghai - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=123456 volumes: - /usr/docker-vol/mysql/data:/var/lib/mysql deploy: replicas: 1 restart_policy: condition: any resources: limits: cpus: "0.2" memory: 512M update_config: parallelism: 1 # 每次更新1個副本 delay: 5s # 每次更新間隔 monitor: 10s # 單次更新多長時間后沒有結束則判定更新失敗 max_failure_ratio: 0.1 # 更新時能容忍的最大失敗率 order: start-first # 更新順序為新任務啟動優先 ports: - 3306:3306 networks: - myswarm-net networks: myswarm-net: external: true
2.3 部署服務棧
1)命令方式
cd docker stack deploy -c mysql-stack.yml mysql-stack
2)portainer界面方式(推薦)
登錄portainer(如果是根據上面的教程部署的portainer,瀏覽器訪問http://宿主機IP:9000,在stack中增加mysql-stack.yml文件中的內容)
三、配置mysql允許遠程IP訪問
官方提供的鏡像和安裝在linux的配置一樣,初始只允許本地服務訪問mysql,需要調整mysql的配置之后才能達到遠程連接的目的。(正如前面講的,目前的方案並不是很合理,將來需要優化這個方式)
# 獲取容器id
docker ps
找到mysql-stack_mysql.*******************的CONTAINER ID(我這里的是0d66abc8ce32)
# 進入容器
docker exec -it 0d66abc8ce32 /bin/bash
# 登錄mysql
mysql -uroot -p
輸入初始化的root密碼123456登錄。
# 進入mysql庫
mysql> use mysql;
# 設置允許root用戶用於通過任意IP訪問mysql
mysql> grant all privileges on *.* to root@'%' identified by "123456";
# 使配置立即生效
mysql> flush privileges;
# 退出mysql
mysql> exit
# 退出容器
exit
接着用navicat連接192.168.12.11:3306,用戶名/密碼:root/123456,提示連接成功,說明mysql容器已經可以使用了。