(全棧學習實踐)四、繼續搭建集羣

目前已完成:php7及擴展、redis5的Dockerfile測試版編寫,稍許完善後同步上傳到github,(記下這裏memcached還沒有剝離安裝)。
今天數據庫,編程的一個重要原則是不要重複造輪子,php因爲需要很多自定義插件、所以單獨編譯鏡像,其實其他包括redis都應該使用官方的,直接pull就行。


一、mysql部分
參考官方鏡像,根據官方鏡像,準備的mysql、mysql_slave文件樹,添加了個數據文件夾。

[]:~/tmp/dk/mysql/mysql_slave# tree ./
./
├── config
│   ├── conf.d
│   │   └── docker.cnf
│   └── my.cnf
└── data

1、創建mysql鏡像

[]:~/tmp/dk# docker pull mysql:8.0
[]:~/tmp/dk# docker run --name mq -p 3306:3306 -v /root/tmp/dk/mysql/data:/var/lib/mysql \
    -v /root/tmp/dk/mysql/config:/etc/mysql \
    -v /root/tmp/dk/mysql/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456  -d mysql:8.0
[]:~/tmp/dk# docker run --name ms -p 3308:3306 -v /root/tmp/dk/mysql_slave/data:/var/lib/mysql \
    -v /root/tmp/dk/mysql_slave/config:/etc/mysql \
    -v /root/tmp/dk/mysql_slave/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456  -d mysql:8.0

退出後臺運行的容器,按 Ctrl+D 進行退出容器,請牢記!
run後運行的容器進入:

a.舊式進入     []:~/tmp/dk# docker attach mq
b.命令進入     []:~/tmp/dk# docker exec -it mq /bin/bash(或/bin/sh)

參考《Docker容器進入的4種方式
a.普通進入:有一個問題。當多個窗口同時使用該命令進入該容器時,所有的窗口都會同步顯示。如果有一個窗口阻塞了,那麼其他窗口也無法再進行操作。所以docker attach命令不太適合於生產環境,平時自己開發應用時可以使用該命令。
b.推薦

2、主從同步數據

# 主服務器
mysql> CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Ron_master_1';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
mysql> flush privileges;
# 從服務器
# remote_host可以是 192.168.1.102 的相對於容器的公網地址
#重置複製狀態參數
mysql> reset slave all;
Query OK, 0 rows affected (0.02 sec)

mysql> change master to master_host='remote_host',master_port=3306,master_user='repl',\
    master_password='Ron_master_1',master_log_file='mysql-bin.000003',master_log_pos=155;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
# 關閉從服務
mysql> STOP SLAVE;

如在配置主從同步前master中已有數據,則需提前進行數據同步操作
登錄master,執行鎖表操作

# 主服務器容器
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.01 sec)
# 完成後
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
# 從服務器容器
xx@fd8bb25a86fc:/# mysqldump -uroot -p -h remote_host -P3306 test > /tmp/test.dump
Enter password: 
xx@fd8bb25a86fc:/# mysql -uroot -p123456
mysql> create database test;
Query OK, 1 row affected (0.01 sec)

# 或直接use然後source file
mysql> quit
Bye
xx@fd8bb25a86fc:/# mysql -u root -p test < /tmp/test.dump
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章