在Centos 7中使用 Docker搭建MySQL异地双向复制环境
(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异地双向复制环境的更多相关文章
- Docker搭建Mysql容器
转载自:http://blog.csdn.net/Mungo/article/details/78521832?locationNum=9&fps=1 本文介绍如何使用docker迅速搭建My ...
- Docker搭建MySQL主从复制
Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...
- MySQL(14)---Docker搭建MySQL主从复制(一主一从)
Docker搭建MySQL主从复制(一主一从) 上一篇博客写了MYSQL主从复制原理 : MySQL(13)---MYSQL主从复制原理 这篇我们来写 Docker搭建MYSQL主从复制(一主一从) ...
- Docker - 在CentOS 7中安装Docker
1-确认系统信息 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # uname -a Linux CentOS-7 3. ...
- Docker搭建MySQL的PXC集群
原文:Docker搭建MySQL的PXC集群 一.简介 PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galer ...
- 在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL
在 树莓派(Raspberry PI) 中使用 Docker 运行 MySQL 本文主要利用 biarms 提供的 Dockerfile 进行安装. 笔者最新发现! MySQL 5.7 Docker ...
- Docker搭建wordpress博客环境(Centos7)
Docker搭建wordpress博客环境(Centos7) 升级系统 yum -y update 设置docker库 sudo yum install -y yum-utils sudo yum-c ...
- 如何通过Docker搭建一个swoft开发环境
本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们. Swoft首个基于 Swoole 原生协程的新时代 PHP ...
- 用 Docker 搭建 ORACLE 数据库开发环境
用 Docker 搭建 ORACLE 数据库开发环境 需要安装 ORACLE 数据库做开发,直接安装的话因为各类平台的限制,非常复杂,会遇到很多问题. 还好,现在有 Docker 化的部署方式,省去很 ...
随机推荐
- linux system函数分析
system函数是在应用编程里面想调用外部命令时最方便的方式了,除非想要获取命令行执行的输出信息, 那system就不行了,需要用popen.但是system内部具体怎么实现及怎么处理它的返回值经常被 ...
- windows中Appium-desktop配合夜神模拟器的使用
1.安装Android SDK并配好环境 ANDROID_HOME :C:\Users\18810\AppData\Local\Android\Sdk path:%ANDROID_HOME%\plat ...
- xcode/Interface Build(IB)/iPhone模拟器/mac/组合键常用的命令集
1.Xcode常用快捷键: win+N:新建文件 win+shift+N:新建工程 win+O:打开工程或文件 win+S:保存 win+shift+S:另存为 win+Z:撤销一步 win+W:关闭 ...
- Markdown文件导出为HTML的小程序
Markdown文件导出为HTML的小程序 为什么做 最近把一些学习经验记下来,总结成MarkDown文件,不知不觉已经有12篇了. Sublime Text 的 MarkDown Preview 插 ...
- RBTree 红黑树
红黑树 一.红黑树概述 红黑树不仅是一个二叉搜索树,并且满足以下规则: 1>每个节点不是红的就是黑的, 2>根结点为黑色, 3>如果节点为红色,其子节点必须为黑色, 4>任一节 ...
- MySQL 基础内容
创建数据库 对于表的操作需要先进入库 use 库名: -- 创建一个名为 inana_db 的数据库,数据库字符编码指定为 utf8create database inana_db character ...
- springboot 返回json格式数据的时间格式配置
#时间戳统一转换 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 NOTE:time-zon ...
- c语言中Triplet是什么意思?
此词条多出现于三元组抽象数据类型的定义. 例如: 数据结构编程试验中,构造三元组类型. 1.三元组抽象数据类型的定义 ADT Triplet { 数据对象:D={e1, e2, e3| e1, e2, ...
- go语言方法实例
方便和函数的区别: 方法能给用户定义的类型添加新的行为.方法实际上也是函数,只是在声明时,在关键字func 和方法名之间增加了一个参数. package main import ( "fmt ...
- 自定义的一个JDBC工具类
package JDBCutils; import java.io.File;import java.io.FileInputStream;import java.sql.Connection;imp ...