设为首页 收藏本站
查看: 1270|回复: 0

[经验分享] 在Centos 7中使用 Docker搭建MySQL异地双向复制环境

[复制链接]

尚未签到

发表于 2015-10-13 12:19:25 | 显示全部楼层 |阅读模式
(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
         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126268-1-1.html 上篇帖子: Hello Docker入门实例 下篇帖子: 基于虚拟linux+docker搭建hadoop完全分布式集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表