docker 安装mysql redis
一、安装mysql
1、从镜像仓库下载mysql镜像
docker pull mysql:5.7
2、启动mysql
docker run -p 3308:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明:
-p 端口映射,格式:主机端口:容器内端口
-v 挂载本地文件夹到docker中
-e 指定环境变量,mysql参数,指定登陆root用户的密码为root
-d 后台方式启动
3 修改mysql默认字符
vi /mydata/mysql/conf/my.cnf
写入下边的配置,修改默认字符集
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
4、重启mysql服务
docker restart mysql
二、安装mysql slave服务
2.1使用docker mysql镜像启动slave进程。
docker run -p 3307:3306 --name mysql2 \
-v /mydata/mysql2/log:/var/log/mysql \
-v /mydata/mysql2/data:/var/lib/mysql \
-v /mydata/mysql2/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
2.2 参考主配置字符集并重启
docker restart mysql2
三、配置mysql主从复制
3.1 复制流程图
3.2 复制过程:
- 主节点必须启用二进制日志,记录任何修改了数据库数据的事件。
- 从节点开启一个线程(I/O Thread)把自己扮演成 mysql
的客户端,通过 mysql 协议,请求主节点的二进制日志文件中的事件; - 主节点启动一个线程(dump Thread),检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主节点就会从第一个日志文件中的第一个事件一个一个发送给从节点。
- 从节点接收到主节点发送过来的数据把它放置到中继日志(Relay log)文件中。并记录该次请求到主节点的具体哪一个二进制日志文件内部的哪一个位置(主节点中的二进制文件会有多个,在后面详细讲解)。
- 从节点启动另外一个线程(sql Thread ),把 Relay log 中的事件读取出来,并在本地再执行一次。
思考:从节点需要建立二进制日志文件吗?
看情况,如果从节点需要作为其他节点的主节点时,是需要开启二进制日志文件的。这种情况叫做级联复制。如果只是作为从节点,则不需要创建二进制文件。
3.3 配置过程
主节点:
- 启用二进制日志。
- 为当前节点设置一个全局唯一的server_id。
vi /mydata/mysql/conf/my.cnf
添加
log-bin=mysql-bin //[必须]启用二进制日志
server-id=1 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
innodb-file-per-table=ON
skip_name_resolve=ON
- 创建有复制权限的用户账号 REPLIACTION SLAVE,REPLIATION CLIENT, 并刷新权限;
CREATE USER 'repluser' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.1.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
4、重启主节点mysql
docker restart mysql
5、检查相关配置
查看二进制日志是否开启
SHOW GLOBAL VARIABLES LIKE ‘%log%’;
查看主节点 serviceid
SHOW GLOBAL VARIABLES LIKE ‘%server_id%’;
SHOW MASTER LOGS
查看master状态
SHOW MASTER STATUS;
从节点:
- 启动中继日志。
- 为当前节点设置一个全局唯一的server_id。
vi /mydata/mysql2/conf/my.cnf
加入:
relay-log=relay-log
relay-log-index=relay-log.index
server-id=2
innodb_file_per_table=ON
skip_name_resolve=ON
SHOW GLOBAL VARIABLES LIKE ‘%log%’;
SHOW GLOBAL VARIABLES LIKE ‘%server_id%’;
- 使用有复制权限的用户账号连接至主节点,并启动复制线程。
CHANGE MASTER TO MASTER_HOST=‘192.168.1.107’,MASTER_PORT=3308,MASTER_USER=‘repluser’,MASTER_PASSWORD=‘123456’,MASTER_LOG_FILE=‘mysql-bin.000001’,MASTER_LOG_POS=918;
命令说明:
CHANGE MASTER TO
MASTER_HOST=‘192.168.1.107’, // 主节点
MASTER_PORT=3308, //主节点的端口号
MASTER_USER=‘repluser’, // 账号
MASTER_PASSWORD=‘123456’, // 密码
MASTER_LOG_FILE=‘mysql-bin.000001’, // SHOW MASTER STATUS 对应的的日志
MASTER_LOG_POS=918; // SHOW MASTER STATUS 对应的Position
- 查看SLAVE状态
SHOW SLAVE STATUS
- 启动复制线程(可以指定线程类型:IO_THREAD ,SQL_THREAD, 如果不指定,则两个都启动)
START SLAVE; - 启动后查看状态
如果出现一直是connecting, docker logs中业报2003 slave连接不上master的连接异常,请关闭主机防火墙重试。
CentOS 7查看防火墙
systemctl status firewalld
firewall-cmd --state
防火墙操作
#开启
service firewalld start
#重启
service firewalld restart
#关闭
service firewalld stop
然后重启docker服务:
systemctl restart docker.service
二、安装Redis
1、下载redis镜像
docker pull redis
2、启动redis 容器
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
3、设置redis 持久化到硬盘
vi /mydata/redis/redis.conf
加入
appendonly yes
4、 重启redis容器
docker restart redis
参考:
https://blog.csdn.net/daicooper/article/details/79905660