(0)一些准备操作:

Centos安装好之后(这里使用的是vm虚拟机)

将当前用户添加到sudoers中:

su root

vim /etc/sudoers

找到

root ALL=(ALL) ALL

在之后添加一行

${user} ALL=(ALL) ALL

保存切换用户即可

本地ssh免密码登陆Centos虚拟机

本地系统为Mac,使用自带的终端工具ssh连接虚拟机

ssh ${user}@${ip}

会要求输入密码

使用scp复制本地的rsa公钥到虚拟机中

scp ~/.ssh/id_rsa.pub ${user}@${ip}:/home/${user}/.ssh

进入虚拟机中的.ssh目录

cat id_rsa.pub >> authorized_keys

修改authorized_keys文件的权限

chmod 600 authorized_keys

没有修改权限的话可能没办法成功

之后即可直接使用ssh ${user}@${ip}登陆虚拟机

方便起见,可以将该命令写入/etc/profile中

alias centos=’ssh ${user}@${ip}’

之后直接执行centos就可以连接到虚拟机

(1)Docker安装:

sudo yum -y install docker

启动Docker服务:

sudo systemctl start docker

设置开机启动Docker:

sudo systemctl enable docker

设置免sudo执行Docker命令:

sudo groupadd docker

sudo gpasswd -a ${user} docker

sudo systemctl restart docker

newgrp - docker

期间若是出现无法上网的情况请参考:

Centos7 虚拟机无法上网解决方法:

(1)

cd /etc/sysconfig/network-scripts/

修改该目录下的ifcfg-eno******

vi ifcfg-eno32

ONBOOT=”yes” 开启自动启用网络连接

重启

(2)

关闭虚拟机,打开虚拟机存储的目录,用记事本打开三台电脑图标的vmx

配置文件,加一条进去

ethernet0.virtualDev = “e1000”

再次开机

由于直接使用官方的MySQL镜像无法满足此次需求,所以从

(2)从一个基本的Ubuntu镜像开始重新配置MySQL:

docker pull ubuntu

从该镜像启动容器

docker run –name mysql -itd ubuntu

进入容器内部bash环境(此时可以像日常操作Linux一样进行操作)

docker exec -it mysql bash

(3)Ubuntu安装MySQL:

更新apt-get

apt-get update

安装MySQL

apt-get -y install mysql-server

容器中的vi编辑器不好用,可以顺便下个vim

apt-get -y install vim

root密码修改为自己的,如果在容器中不知道密码可以使用一下命令修改

passwd root

这里可以先将这个容器保存为镜像,免得之后出错了要重新安装这些东西

docker commit mysql

docker tag ${id} chubby/mysql:0.1

(4)在Ubuntu容器中配置MySQL多实例启动

目标:在一个Ubuntu容器中可以启动两个MySQL服务

作用:每个容器模拟一个数据库服务器,两个MySQL服务分别准备做异地容灾的主从

修改mysql配置文件:

vim /etc/mysql/my.cnf

在[mysqld]的内容中加入:

log_slow_queries=/var/log/mysql/mysql-slow.log

log-bin

server-id=1

注释一行:

bind-address = 127.0.0.1

没有注释的话从节点无法连接到master

另外加入两个内容:

[mysqld_multi]

mysqld = /usr/bin/mysqld_safe

mysqladmin = /usr/bin/mysqladmin

user = root

password = root

[mysqld1]

socket = /var/run/mysqld/mysqld1.sock

port = 3307

pid-file = /var/run/mysqld/mysqld1.pid

log-slow-queries = /var/log/mysql1/mysql-slow.log ## mysql slow log

relay-log = /var/spool/mysqld1/mysqld-relay-bin ## relay for replication

datadir = /var/lib/mysql1 ## mysql data file folder

user = mysql

log-bin

server-id=2

以上的配置具体看情况设置

启动MySQL:

service mysql start

修改root密码:

mysqladmin -u root -p password “root”

初始化第二个MySQL实例:

mysql_install_db –user=mysql –datadir=/var/lib/mysql1

启动该MySQL实例:

mysqld_multi start 1

使用命令查看3306、3307端口是否开启

netstat -tunlp

如果有则启动成功

登陆该实例时需要制定sock文件

修改该实例的root密码:

mysqladmin -S /var/run/mysqld/mysqld1.sock -u root -p password “root”

登陆该实例:

mysql -S /var/run/mysqld/mysqld1.sock -uroot -proot

进去之后可以使用

show variables like ‘%datadir%’;

查看datadir是否是配置文件中的路径

(5)配置主从双向复制

将这个容器提交成镜像

docker commit mysql

docker tag ${id} chubby/mysql:1.0

使用这个镜像启动两个容器

docker run –name mysql1 -itd chubby/mysql:1.0

docker run –name mysql2 -itd chubby/mysql:1.0

进入bash环境

docker exec -it mysql1 bash

docker exec -it mysql2 bash

分别启动两个容器中的两个mysql实例

进入主数据库(默认的3306端口,两个容器相同的操作)

mysql -uroot -proot

查看用户登陆信息

select user,host from mysql.user;

设置root用户可以从任何地方登陆访问任何表

grant all on *.* to root@’%’ identified by ‘root’ with grant option;

新建一个用户backup用来

给从数据库登陆,获取主数据库信息,密码也是backup(这里设置的登陆地址为localhost,如果从数据库在别的机器上需要修改为对应的IP)

GRANT REPLICATION SLAVE ON *.* to ‘backup’@’%’ identified by ‘backup’;

刷新

flush privileges;

查看用户登陆信息

select user,host from mysql.user;

可以看到相关用户的登录权限已经设置好了

使用

show variables like “%log_%”;

查看二进制日志是否开启(配置文件中的log-bin),要使用主从复制一定要开启这个

使用

show master status;

查看主数据库信息

File和Position

这两个信息会在配置从数据库的时候用到

进入从库,执行下列命令进行主库信息配置

change master to master_host=’localhost’,master_user=’backup’,master_password=’backup’,master_log_file=’mysqld-bin.000003’,master_log_pos=107;

master_host:主库地址(如果不是默认的3306可以使用master_port指定端口信息)

master_user:上面配置的从库登陆主库的用户

master_log_file:即主库show master status;中File的值

master_log_pos:即主库show master status;中Position的值

开启从库

start slave;

查看状态信息

show slave status\G

其中的

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

两个必须都为Yes才是成功

此时为Slave单向复制Master,若要变为双向复制则将Master和Slave节点的角色互换然后分别做各自角色的配置即可

若是Slave同步的时候出现问题:

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’

在对应的Master中

flush logs;

show master status;

记下File, Position

重新执行

change master to master_host=’localhost’,master_user=’backup’,master_password=’backup’,master_log_file=’mysqld-bin.000003’,master_log_pos=107;

即可

一些其他的资料:

(1)使用Docker官方的MySQL镜像

docker pull busybox

docker pull docker.io/mysql

使用busybox启动镜像作为挂载数据的容器

docker run –name mysql_data -v /var/lib/mysql -d busybox echo “MySQL data”

使用MySQL镜像连接到数据容器的volume中

docker run –name=mysql_server –volumes-from mysql_data -e MYSQL_ROOT_PASSWORD=root -d docker.io/mysql

Docker容器挂载磁盘路径无法访问的问题解决方法,添加selinux规则,将要挂载的目录添加到白名单:

chcon -Rt svirt_sandbox_file_t /home/docs

(2)Centos 7缺乏yum源安装mysql:

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

sudo rpm -ivh mysql-community-release-el7-5.noarch.rpml

安装这个包后,会获得两个mysql的yum repo源:

/etc/yum.repos.d/mysql-community.repo

/etc/yum.repos.d/mysql-community-source.repo。

安装mysql:

sudo yum install mysql-server

在Centos 7中使用 Docker搭建MySQL异地双向复制环境的更多相关文章

  1. Docker搭建Mysql容器

    转载自:http://blog.csdn.net/Mungo/article/details/78521832?locationNum=9&fps=1 本文介绍如何使用docker迅速搭建My ...

  2. Docker搭建MySQL主从复制

    Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...

  3. MySQL(14)---Docker搭建MySQL主从复制(一主一从)

    Docker搭建MySQL主从复制(一主一从) 上一篇博客写了MYSQL主从复制原理 : MySQL(13)---MYSQL主从复制原理 这篇我们来写 Docker搭建MYSQL主从复制(一主一从) ...

  4. Docker - 在CentOS 7中安装Docker

    1-确认系统信息 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # uname -a Linux CentOS-7 3. ...

  5. Docker搭建MySQL的PXC集群

    原文:Docker搭建MySQL的PXC集群 一.简介 PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galer ...

  6. 在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL

    在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL 本文主要利用 biarms 提供的 Dockerfile 进行安装. 笔者最新发现! MySQL 5.7 Docker ...

  7. Docker搭建wordpress博客环境(Centos7)

    Docker搭建wordpress博客环境(Centos7) 升级系统 yum -y update 设置docker库 sudo yum install -y yum-utils sudo yum-c ...

  8. 如何通过Docker搭建一个swoft开发环境

    本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们. Swoft首个基于 Swoole 原生协程的新时代 PHP ...

  9. 用 Docker 搭建 ORACLE 数据库开发环境

    用 Docker 搭建 ORACLE 数据库开发环境 需要安装 ORACLE 数据库做开发,直接安装的话因为各类平台的限制,非常复杂,会遇到很多问题. 还好,现在有 Docker 化的部署方式,省去很 ...

随机推荐

  1. HashMap/Hashtable/ConcurrentHashMap区别

    HashMap:每个隔间都没锁门,有人想上厕所,管理员指给他一个隔间,里面没人的话正常用,里面有人的话把这个人赶出来然后用. 优点,每个人进来不耽误都能用:缺点,每一个上厕所的人都有被中途赶出来的危险 ...

  2. 1.docker镜像

    1.docker的安装 安装 wget -qO- https://get.docker.com/ | sh 启动docker后台服务 sudo service docker start 测试运行hel ...

  3. git常用命令收集

    [git远程操作命令] 1.$ git remote –v #查看本地配置的所有远程仓库,内容为远程仓库的地址和本地别名 harvey@harvey:~/node$ git remote -v nod ...

  4. [ Linux 命令 ] awk

    一.AWK简介 awk:报告生成器,是以行为单位进行处理,并格式化后显示 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说a ...

  5. vue + vue-router + vue-resource 基于vue-cli脚手架 --->笔记

    ps: 基于Vue2.0 npm的vue-cli脚手架 在vue-router中路由路径的简写代码: 点击打开项目 > build > webpack.base.conf.js 找到web ...

  6. Eclipse SVN还原文件到历史版本详解

    由于某些特殊原因,我们可能需要将SVN资源库中的某个文件回滚到以前的某个历史版本(准确地说,这不是"回滚","回滚"操作会导致指定版本到当前版本的变更记录丢失, ...

  7. rtsp 学习

    1.1.   RTSP协议简介 一种应用层协议,可基于tcp或udp协议. Real Time Streaming Protocol或者RTSP(实时流媒体协议),是由Real network 和 N ...

  8. POJ 1164 城堡问题【DFS/位运算/种子填充法/染色法】

    1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # | ...

  9. 树状数组【CF703D】Mishka and Interesting sum

    Description 给你n( 1<=n<=1000000)个数,以及m(1<=m<=1000000)个询问,每个询问包括l和r,问你在这n个数中,区间l~r,出现偶数个数的 ...

  10. 【转】vector用法

    原博地址:http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html 在c++中,vector是一个十分有用的容器,下面对这个容器做一下总 ...