欢迎访问我的博客 http://www.liyblog.top 我的博客里会有更详细的信息,而且留言必回,手把手给你解释不懂的地方
1.mysql部署
mysql镜像拉取
docker pull mysql:5.7.13
部署主从mysql配置
参考网址: http://www.liyblog.top/p/11.html
【运行主容器】
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会自动忽略配置文件的读取
解决方案:
参考网站: https://www.jb51.net/article/99027.htm
找到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容器环境扩展和服务安装
扩展安装参考网站: https://blog.csdn.net/lggirls/article/details/89395827
扩展安装路径
/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
常见问题参考网站
https://phperzh.com/articles/1789
configure: error: jpeglib.h not found.
解决办法:
apt-get install libjpeg-dev
Redis 安装参考 http://www.iamlintao.com/6695.html
(如果 无法解压 直接复制redis地址下载到本机)
curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/3.1.3.tar.gz
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