mysql主从配置及常见错误(不断更新中)

来源:互联网 发布:mac下ant环境变量配置 编辑:程序博客网 时间:2024/04/29 12:18

Mysql5.6版本后修改的配置:(为网上搜索到的资源)http://www.iteye.com/news/26199
注意:主从之间的版本差别不要太大,主机若为5.6或以后,从机最好也是5.6或以后,版本比主机稍微大一点点没事。其他的情况还没试过。
一、概述

1、主从复制简介

MySQL主从复制就是将一个MySQL实例(Master)中的数据实时复制到另一个MySQL实例(slave)中,而且这个复制是一个异步复制的过程。
实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(sql_thread和IO_thread),另外一个进程在Master(IO进程)
上。
2、主从复制原理、机制

要实施复制,首先必须打开Master端的记录日志(log-bin)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获
取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。
复制的基本过程如下:
1)、Slave上面的IO_thread连接上Master,并请求从指定日志文件的指定位置之后的日志内容;
2)、Master接收到来自Slave的IO_thread的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave的IO_thread。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-logfile的以及bin-logpos;

3)、Slave的IO_thread接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-
log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始
往后的日志内容,请发给我”;
4)、Slave的Sql_thread检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的
内容,并在本数据库中执行。

二、搭建

MySQL主从复制搭建主要步骤有:Master端配置部署、Slave端配置部署
Master端配置部署

a、配置参数:

修改配置(Centos下:vi/etc/my.cnf; Ubuntu下:sudovi/etc/mysql/my.cnf)
server-id=1 //给数据库服务的唯一标识,主数据库一般为1
log-bin=mysql-bin //启动日志
log-bin-index=mysql-bin.index
binlog_format=mixed
binlog-do-db=piwik //需要备份数据
注释掉这一行:#bind-address = 127.0.0.1

b、进mysql里设置:

创建一个用户’slave’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步.
mysql>createuser slave;
//slave用户必须具有replicationslave权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。
mysql>grant replication slaveon*.* to’slave_user’@’192.168.0.%’identified by’slave_password’;

c、查看日志
mysql>show master status
+——————-+———-+————–+——————+
|File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————-+———-+————–+——————+
|master-bin.000001 | 1285 | | |
+——————-+———-+————–+——————+
1row in set (0.00 sec)

slave端配置部署

a、配置参数:

修改配置(Centos下:vi/etc/my.cnf; Ubuntu下:sudovi /etc/mysql/my.cnf)
server-id=2 //给数据库服务的唯一标识,应大于主数据库的server-id
log_bin=slave-bin
replicate_do_db=piwik//要复制的数据库
slave-skip-errors=1062,1050
//注意:在ubuntu下有效,centos无效。用于忽略复制过程产生的sql错误。1062是主键冲突的错误,1050是建表时发现已存在该表的
错误。加入这一条,就可在导入前面的数据后,从mysql-bin.00000*的第一位开始同步。
changemaster to master_host=’主机ip’,master_port=主机mysql端口号(一般为3306),master_user=’用于同步数据的帐号
名’,master_password=’同步数据的账号密码’,master_log_file=’mysql-bin.000009’,master_log_pos=1;

b、进mysql里设置:

mysql>show slave status;
–查看slaves的状态,在出现的信息中找到Slave_IO_Running/Slave_SQL_Running,都为YES则配置成功了。

–停止同步状态
mysql>stopslave;

–设置从master复制日志配置
mysql>changemaster to master_host=’主机ip’,

master_port=3306,master_user=’用于同步数据的帐号
名’,
master_password=’同步数据的账号密码’,
master_log_file=’mysql-bin.000008’,master_log_pos=12133662;

–master_log_file和master_log_pos的内容是在master下showmaster status看到的fileposition信息。

–设置完毕,开启同步状态
mysql>start slave;

–搞定!

异常解决

Mysql从机停电后重启,报异常1594

解决方法:
进去mysql;
mysql>show slave status;
–查看slaves的状态,在出现的信息中找到Relay_Master_Log_File(num.10)和Exec_Master_Log_Pos(num.22)
mysql>stop slave;
Mysql>change master to
master_host=’主机ip’,master_port=3306,master_user=’用于同步数据的帐号名’,master_password=’同步数据的账号密码’,master_log_file=’Relay_Master_Log_File的值’,master_log_pos=Exec_Master_Log_Pos的值;
mysql>start slave;

说明:Relay_Master_Log_File为当前slave同步的master的binlog,Exec_Master_Log_Pos同步的起点文件的位置

Ok!

以上为本人实践通过,若大家有更好的想法或意见,欢迎交流!

1 0
原创粉丝点击