docker 配置数据库主从

Author Avatar
lucky 2018年11月25日
  • 在其它设备中阅读本文章

首先简单的介绍一下 docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

简单的来说呢,docker 就是一个虚拟化容器. 你可以在里面安装任意东东, 比如 ubuntu,centos,mysql, 如果安装的东东出现问题了直接把这个容器删掉重新运行一个容器就好了, 不需要重装 linux 系统. 操作起来是不是简单了很多呢.

docker 中有两个概念, 镜像和容器. 容器是镜像运行时产生的实例, 一个镜像可以产生多个容器. 比如我安装了一个 mysql, 我可以运行两次 mysql. 这样 docker 中存在了一个 mysql 镜像和 2 个 mysql 容器.

docker 命令请自行百度.

安装 mysql

1. 拉取镜像

docker pull mysql:5.7.18

2. 列出镜像

[root@zk01 ~]# docker images
REPOSITORY                                                   TAG                 IMAGE ID            CREATED             SIZE
mysql                                                        5.7.18              e799c7f9ae9c        5 weeks ago         407MB

3. 运行 docker

docker run -d -p 3306:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 --privileged=true mysql:5.7.18

-d 后台运行
-p 端口映射
--name 别名
-e 配置
--privileged=true 给容器加上特定权限

4. 列出正在运行的容器

[root@zk01 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
e1066fe2db35        mysql:5.7.18        "docker-entrypoint..."   6 seconds ago       Up 6 seconds        0.0.0.0:3306->3306/tcp   mymysql

5. 进入容器

docker exec -it 实例编号(例如这里的e1066fe2db35)/bin/bash

6. 查看配置文件

/etc/mysql/mysql.conf.d/mysqld.cnf

查看配置文件的时候可能会报找不到 vim 命令, 那就安装一下了

首先更新源

apt-get update

然后安装 vim

apt-get install vim 

配置 mysql 主从

大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached, 如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。Ok 切入今天微博主题,利用 MySQL 主从配置,实现读写分离,减轻数据库压力。这种方式,在如今很多网站里都有使用,也不是什么新鲜事情,今天总结一下,方便大家学习参考一下。

概述:搭设一台 Master 服务器和一台 Slave 服务器(为了方便这里均安装在同一台服务器的 docker 下了, 只是开了不同端口)

原理:主服务器(Master)负责网站 NonQuery 操作,从服务器负责 Query 操作,用户可以根据网站功能模特性块固定访问 Slave 服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用 MySQL 的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。

1. 安装

看上面看上面!!!

2. 配置 Master 主服务器

(1)在 Master MySQL 上创建一个用户‘repl’,并允许其他 Slave 服务器可以通过远程访问 Master,通过该用户读取二进制日志,实现数据同步。

mysql>create user repl; //创建新用户
//repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';

(2)修改配置文件

在[mysqld]下面增加下面几行代码

server-id=1   //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
log-bin=master-bin
log-bin-index=master-bin.index

(3)查看日志

mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 1285 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

重启 MySQL 容器, 重启哦! 使用 stop 和 start, 不要使用 rm 和 run!

3、配置 Slave 从服务器

(1)找到 MySQL 配置文件,在[mysqld] 下面增加下面几行代码

[mysqld]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin 
重启MySQL服务

(2)连接 Master

mysql> change master to master_host='192.168.0.104', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=0;

(3)启动 Slave

mysql> start slave;

(4)查看信息

mysql> show slave status\G

OK 所有配置都完成了,这时候大家可以在 Master Mysql 中进行测试了,因为我们监视的时 Master mysql 所有操作日志,所以,你的任何改变主服务器数据库的操作,都会同步到从服务器上。创建个数据库,表试试吧。。。

评论已关闭