博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
centos6下mysql的主从复制的配置
阅读量:6295 次
发布时间:2019-06-22

本文共 2780 字,大约阅读时间需要 9 分钟。

2015年9月17日 23:00:36 update

想要好好了解mysql复制,还是去看看《高性能MySQL》(第三版)好了,上面说的比较详细。

===========

在本地用virtualbox安装了两台centos6.7服务器,配置了主从复制。两个服务器都配置了第二块网卡(host-only),master的ip为192.168.56.102
slave的ip为192.168.56.103

安装

centos-6.7-minimal.iso

配置eth0网卡

默认不能上网!因为没开启eth0

vi /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOT=yes #修改!MM_Controlled=no #修改!BOOTPROTO=dhcp #不修改,就用它!##其他没有列出的行,用默认值,不要动!/etc/init.d/network restart

添加网卡

cd /etc/sysconfig/network-scriptscp ifcfg-eth0 ifcfg-eth1vi /etc/udev/rules.d/70-persistent-net.rule #查看eth1的mac地址并复制vi ifcfg-eth1#修改掉mac地址#删除UUID  没有这个UUID一样可以玩!因为我并没有找到好用的寻找到uuid的方法

关selinux

我就没见这东西好用过!

vi /etc/selinux/configSELINUX=disabled #!修改!reboot #退出vim后,重启才能生效

mysql安装和简单配置

yum install mysql mysql-devel mysql-serverchkconfig --add mysqldchkconfig mysqld on  #开机自动启动service mysqld startmysql_secure_installation  #安全安装:设定root密码,移除匿名用户,禁用远程登陆,删除测试数据和访问权限,重新加载用户权限表

master配置

cp /etc/my.cnf /etc/my.cnf.bak  #备份vi /etc/my.cnf#编辑文件内容为:datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socklog-bin=mysql-bin  #新增。表示使用二进制日志。前面的datadir则指定了binlog的存放目录server-id=102  #新增。用本机ip最后一段,比如192.168.56.102那么使用102/etc/init.d/mysqld restart #重启mysqlmysql -uroot -ppipe36#    #登陆mysqlmysql>grant replication slave, replication client on *.* to 'repl'@'192.168.56.103' identified by 'zjmos123567'# 设定允许slave服务器使用的master帐号,允许其远程登陆(指定了slave的ip地址),同时设定了用户名和密码

接下来,从数据库中导出数据,然后传送给slave服务器,并在slave服务器中导入sql文件。

为了确保没有数据库插入或者修改操作,要设定lock:

mysqldump -uroot -ppipe36# --lock-all-tables testDB > testDB.sql  #导出testDB数据库到testDB.sql文件
mysql -u root -pmysql>show master status; #查看状态!重要! File字段和Position字段给slave用的!

slave配置

my.cnf中加入server-id

#[mysqld]下添加两行log-bin=mysql-bin #非必须server-id=103  #一般取本及机ip最后一段

重启mysql

service mysqld restart

导入master的sql文件

注意 master导出的文件可能只是一个数据库的(本例),因此可能sql文件中头部缺少两句:

create database xxx if not exists;use xxx;

那么需要slave登陆mysql后手动输入这两句,以指定数据库名。

mysql -u root -psource testDB.sqlchange master to master_host='192.168.56.102',master_user='repl',master_password='zjmos123567',master_log_file='mysql-bin.000009',master_log_pos=901;

此处,master_user用户是master上创建的用户,master_password和前面master中的配置的要保持一致;master_log_file的值要和master中查询到的master status结果中的File保持一致,master_log_pos则和Position字段保持一致。

mysql> start slave; #开启slavemysql> show slave status\G  #查看slave是否正常工作,主要看`Slave_IO_Running`和`Slave_SQL_Running`

还是不行?

无语了。slave的Slave_IO_Running项一直显示NO

发现是防火墙iptable在作怪。master和slave都关掉好了:

service iptables stopchkconfig iptables off

然后重启动mysql服务,终于好了。

===

常见错误和solution

Error duplicate entry ....

因为同步出错了。

在slave上执行:

stop slave;set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;start slave;

然而,counter设置为1也还是很不靠谱的。

有时候因为mysql发生了回滚操作,因此要避开的insert失败(错误代码1062)项,有非常多。

这时候不妨在my.cnf(windows下是my.ini)中进行配置:

slave-skip-errors = 1062

然后重启mysql服务,再看看mysql主从复制的结果。等复制好了,再把上面这条skip的配置项去掉。毕竟一直skip感觉很不安全啊。。

转载地址:http://lytta.baihongyu.com/

你可能感兴趣的文章
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>
如何清理mac系统垃圾
查看>>
企业中最佳虚拟机软件应用程序—Parallels Deskto
查看>>
Nginx配置文件详细说明
查看>>
怎么用Navicat Premium图标编辑器创建表
查看>>
Spring配置文件(2)配置方式
查看>>
MariaDB/Mysql 批量插入 批量更新
查看>>
ItelliJ IDEA开发工具使用—创建一个web项目
查看>>
solr-4.10.4部署到tomcat6
查看>>
切片键(Shard Keys)
查看>>
淘宝API-类目
查看>>
virtualbox 笔记
查看>>
Git 常用命令
查看>>
驰骋工作流引擎三种项目集成开发模式
查看>>
SUSE11修改主机名方法
查看>>
jdk6.0 + Tomcat6.0的简单jsp,Servlet,javabean的调试
查看>>
Android:apk签名
查看>>
2(2).选择排序_冒泡(双向循环链表)
查看>>