docker-laravel-mysql 主从服务部署

参考网站:http://www.liyblog.top/p/11.html

1.mysql部署

mysql镜像拉取

docker pull mysql:5.7.13

部署主从mysql配置

参考网址:https://my.oschina.net/u/3773384/blog/1810111

【运行主容器】

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.检查是否配置成功

showslavestatus;

当状态显示为上方的一致时表明应该主从配置成功

9.如果失败,可以查看日志追踪,查看具体的报错日志

docker logs slave -f

10.如果 Slave_IO_Running与Slave_SQL_Running 两个参数不是yes可以使用下面的方案解决

此方法适用首先要保证库的数据是一致的,否则这种方法无效

stopslave; 

setGLOBALSQL_SLAVE_SKIP_COUNTER=1; 

startslave;

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--linkzxb_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--linkscratch_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.gzhttps://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

你可能感兴趣的:(docker-laravel-mysql 主从服务部署)