docker-主從服務部署

歡迎訪問個人博客 http://www.liyblog.top 個人博客裏會有更詳細的信息,並且留言必回,手把手給你解釋不懂的地方
 
1.mysql部署
 
mysql鏡像拉取
docker pull mysql:5.7.13
 
部署主從mysql配置

 
【運行主容器】
 
docker run --name ipbank_master -p 8016:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13
 
2.使用Navicat或者workbanch友好的圖像化界面執行SQL,執行完畢,結果如圖所示爲正常
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup';
show grants for 'backup'@'%';
 
3.拷貝一份MySQL配置文件
docker cp ipbank_master:/etc/mysql/my.cnf /opt/server/ipbank/master/my.cnf
4.修改my.cnf,在 [mysqld] 節點最後加上後保存
log-bin=mysql-bin 
server-id=1
5.將修改後的文件覆蓋Docker中MySQL中的配置文件
docker cp /opt/server/ipbank/master/my.cnf ipbank_master:/etc/mysql/my.cnf
 
6.重啓 mysql 的docker , 讓配置生效
docker restart ipbank_master
 
【運行從容器】
 
1.運行從mysql服務
docker run --name ipbank_slave1 -p 8017:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13
 
2.拷貝一份MySQL配置文件
docker cp ipbank_slave1:/etc/mysql/my.cnf /opt/server/ipbank/slave1/my.cnf
 
 
4.修改my.cnf,在 [mysqld] 節點最後加上後保存
log-bin=mysql-bin 
server-id=2
 
5.將修改後的文件覆蓋Docker中MySQL中的配置文件
docker cp /opt/server/ipbank/slave1/my.cnf ipbank_slave1:/etc/mysql/my.cnf
 
6.重啓slave1容器,使配置生效
docker restart ipbank_slave1
 
 
7.使用Navicat或者workbanch友好的圖像化界面執行SQL(host處若是部署的爲本地服務應該填寫本地服務固定IP地址,不能直接填寫127.0.0.1或者localhost)
CHANGE MASTER TO
MASTER_HOST='192.168.1.106' 
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='123456';
 
START SLAVE;
 
參數解釋
MASTER_HOST 填Navicat鏈接配置中的ip應該就能夠
MASTER_PORT 主容器的端口
MASTER_USER 同步帳號的用戶名
MASTER_PASSWORD 同步帳號的密碼
 
 
8.檢查是否配置成功
 
show slave status;
 
當狀態顯示爲上方的一致時代表應該主從配置成功
 
9.若是失敗,能夠查看日誌追蹤,查看具體的報錯日誌
docker logs slave -f
 
10.若是 Slave_IO_Running與Slave_SQL_Running 兩個參數不是yes能夠使用下面的方案解決
此方法適用首先要保證庫的數據是一致的,不然這種方法無效
 
stop slave; 
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
start slave;
 
11.出現slave容器配置主從出現(Slave is not configured or failed to initialize properly)報錯
此錯誤有兩種可能
 
一。是由於mysql中配置文件權限問題 ,配置文件權限分配過大,mysql會自動忽略配置文件的讀取
解決方案:
找到my.conf文件,設置權限爲644 
命令:chmod 644 /etc/mysql/my.cnf
 
二。從 5.6.25 版本使用 innobackupex 備份,在 5.7.15 版本中應用恢復,在 5.6.25 版本中,主從信息記錄到了文件中,5.7.15 版本中的主從信息記錄的是在表中,因此數據備份後須要對下面幾張表進行重建
 
進入mysql後使用以下命令
use mysql;
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;
source /usr/share/mysql/mysql_system_tables.sql(須要查找sql文件位置 能夠使用命令:find / -name mysql_system_tables.sql)
 
外網使用記錄(master,slave1)
 
mysql掛載到data下
(master) 
docker run -it --name zxb_mysql_master -p 8016:3306 -e MYSQL_ROOT_PASSWORD=e5244a754923b46c --privileged=true -v /data/ZhengXin/mysql/conf/master.cnf:/etc/mysql/my.cnf -v /data/ZhengXin/mysql/data:/var/lib/mysql -v /data/ZhengXin/mysql/logs:/var/log/mysql -d mysql:5.7.13
 
(slave1) 
docker run -it --name zxb_mysql_slave1 -p 8017:3306 -e MYSQL_ROOT_PASSWORD=e5244a754923b46c --privileged=true -v /data/ZhengXin/mysql/conf/slave1.cnf:/etc/mysql/my.cnf -v /data/ZhengXin/mysql/slave1_data:/var/lib/mysql -v /data/ZhengXin/mysql/logs:/var/log/mysql -d mysql:5.7.13
 
 
 

 
2.拉取redis鏡像
docker pull redis:3.2
 
 
3.運行redis鏡像
docker run --name ipbank_redis -p 8015:6379 -d redis:3.2
 
4.拉取php鏡像
docker pull php:7.1-fpm
 
5.運行php鏡像
運行php鏡像時:
    1.指定映射端口
    2.掛載本地目錄
    3.link須要的mysql,redis
 
docker run -d -p 8029:9000 --name zxb_phpserve -v /opt/server/ipbank/www:/var/ www/html -v /opt/server/ipbank/php:/usr/local/etc/php --link ipbank_redis:ipbank_redis --privileged=true php:7.2-fpm
 
 
6.運行nginx鏡像
運行php鏡像時:
    1.指定映射端口
    2.掛載本地目錄
    3.link須要的php_serve
 
docker run --name zxb_nginxserve -d -p 8028:80 -v /opt/server/ipbank/www :/usr/share/nginx/html -v /opt/server/ipbank /nginx:/etc/nginx -v /opt/server/ipbank /logs/nginx.logs:/var/log/nginx --link zxb_phpserve:zxb_phpserve --privileged=true nginx
 
docker run --name zxb_nginxserve -d -p 8068:80 -v /Users/liyi/school_server/scratch-php/www :/usr/share/nginx/html -v /Users/liyi/school_server/scratch-php /nginx:/etc/nginx -v /Users/liyi/school_server/scratch-php /logs/nginx.logs:/var/log/nginx --link scratch_phpserve:scratch_phpserve --privileged=true nginx
 
7.php容器環境擴展和服務安裝
 
擴展安裝路徑
/usr/local/bin
 
Gd擴展安裝
apt-get install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev
 
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2
 
docker-php-ext-install gd
 
Curl擴展安裝
apt-get install libcurl4-openssl-dev
docker-php-ext-install curl
 
常見問題參考網站
configure: error: jpeglib.h not found.
解決辦法:
apt-get install libjpeg-dev
 
Redis 安裝參考  http://www.iamlintao.com/6695.html
(若是 沒法解壓 直接複製redis地址下載到本機)
 
tar xfz /tmp/redis.tar.gz
rm -r /tmp/redis.tar.gz
mkdir -p /usr/src/php/ext
mv phpredis-3.1.3 /usr/src/php/ext/redis
docker-php-ext-install redis
 
安裝gmp擴展
 
apt-get install -y libgmp-dev
ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h \
docker-php-ext-install gmp
 
若是沒法建立ini文件須要建立下列文件夾
 
mkdir /usr/local/etc/php/conf.d/
 
 
 
Nginx 配置文件缺失問題
 
須要在映射文件拉去nginx的配置文件,地址在碼雲上有
 
Mysql沒法鏈接的問題(Access denied for user 'root'@'172.17.0.1')
 
須要在映射文件拉取nginx的配置文件,地址在碼雲上有
 
安裝crontab 定時任務
 
apt-get install cron
 
service cron start
 
安裝mysqli擴展
 
docker-php-ext-install mysqli
 
安裝pdo_mysql擴展
 
docker-php-ext-install pdo_mysql
 
安裝bcmath擴展
 
docker-php-ext-install bcmath
 
安裝zip, unzip
apt-get install --yes zip unzip
相關文章
相關標籤/搜索