文档章节

MySQL6.5实现数据库之间的主从同步

aibati2008
 aibati2008
发布于 2017/03/31 18:12
字数 1437
阅读 18
收藏 1

具体步骤:

1、主从服务器要求
  1.1、版本一致
  1.2、初始化表,并在后台启动mysql

2、修改主服务器master:
   #vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[必须]启用二进制日志
       server-id=1     //[必须]服务器唯一ID

3、修改从服务器slave:
   #vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[不是必须]启用二进制日志
       server-id=2     //[必须]服务器唯一ID,默认是1

4、重启两台服务器的mysql
   /etc/init.d/mysql restart

5、在主服务器上建立帐户并授权slave:
   #/usr/local/mysql/bin/mysql -uroot -pmttang   
   mysql>GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456';

//一般不用root帐号,

6、登录主服务器的mysql,查询master的状态

查看server-id

mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.00 sec)


   mysql>show master status;
   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000004 |      308 |              |                  |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)
   注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。

7、配置从服务器Slave:
 

mysql>change master to master_host='10.24.11.11',master_user='root',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=120;



   Mysql>start slave;    //启动从服务器复制功能

8、检查从服务器复制功能状态:

   mysql> show slave status\G

   *************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.2.222  //主服务器地址
              Master_User: mysync   //授权帐户名,尽量避免使用root
              Master_Port: 3306    //数据库端口,部分版本没有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
              Read_Master_Log_Pos: 600     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
              Relay_Log_File: ddte-relay-bin.000003
              Relay_Log_Pos: 251
              Relay_Master_Log_File: mysql-bin.000004
              Slave_IO_Running: Yes    //此状态必须YES
              Slave_SQL_Running: Yes     //此状态必须YES
                    ......
 

注意

1、Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

2、对于mysql需要重启的情况, 尤其是线上服务重启一定要小心。可手动执行stop slave.  然后再正常关闭mysql, 重启后,手动start slave, 应该就可以正常同步。不然有可能重启后出现数据不一致的问题。 

mysql意外重启,虽然在下次重启启动后,记录了异常信息和备份的binlog 日志文件及位置。如果是正在执行binlog SQL,但此时mysql意外关闭,记录的position 较旧,导致下次启动时,会有部分binlog 日志重复执行导致。如果出现此错误解决可参考 http://www.cnblogs.com/qdpurple/p/4975595.html,或者直接重新导入主数据库数据后再同步。


以上操作过程,主从服务器配置完成。

 

 

 

同步常见错误:

1、出现错误提示、

 

 

Slave I/O: error connecting to master 'backup@192.168.1.x:3306' - retry-time: 60  retries: 86400, Error_code: 1045

 

解决方法

 

从服务器上删除掉所有的二进制日志文件包括一个数据目录下的master.info文件和hostname-relay-bin开头的文件。

 

master.info:记录了Mysql主服务器上的日志文件和记录位置、连接的密码。

 

 2、出现错误提示

 

 

Error reading packet from server: File '/home/mysql/mysqlLog/log.000001' not found (Errcode: 2) ( server_errno=29)

 

解决方案

 

由于主服务器运行了一段时间产生了二进制文件而slave是从log.000001开始读取的删除主机二进制文件包括log.index文件。

 

3、错误提示如下

 

 

Slave SQL: Error 'Table 'xxxx' doesn't exist' on query. Default database: 't591'. Query: 'INSERT INTO `xxxx`(type,post_id,browsenum) SELECT type,post_id,browsenum FROM xxxx WHERE hitdate='20090209'', Error_code: 1146

 

解决方法

 

由于slave没有此table表添加这个表使用slave start 就可以继续同步。

 

 

4、错误提示如下

 

 

Error 'Duplicate entry '1' for key 1' on query. Default database: 'movivi1'. Query: 'INSERT INTO `v1vid0_user_samename` VALUES(null,1,'123','11','4545','123')'

Error 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1' on query. Default database: 'club'. Query: 'INSERT INTO club.point_process ( GIVEID, GETID, POINT, CREATETIME, DEMO ) VALUES ( 0, 4971112, 5, '2010-12-19 16:29:28','

1 row in set (0.00 sec)

 

 

 

 Mysql > Slave status\G;

 

显示Slave_SQL_Running 为 NO

 

解决方法

 

Mysql > stop slave;

 

Mysql > set global sql_slave_skip_counter =1 ;

 

Mysql > start slave;

 

5、错误提示如下

 

# show slave status\G;

 

 

Master_Log_File: mysql-bin.000029

Read_Master_Log_Pos: 3154083

Relay_Log_File: c7-relay-bin.000178

Relay_Log_Pos: 633

Relay_Master_Log_File: mysql-bin.000025

Slave_IO_Running: Yes

Slave_SQL_Running: No

Replicate_Do_DB: club

Replicate_Ignore_DB: 

Replicate_Do_Table: 

Replicate_Ignore_Table: 

 

Replicate_Wild_Do_Table: 

 

Replicate_Wild_Ignore_Table: 

 

Last_Errno: 1594

 

Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.

 

Skip_Counter: 0

 

Exec_Master_Log_Pos: 1010663436

 

 

这个问题原因是主数据库突然停止或问题终止更改了mysql-bin.xxx日志slave服务器找不到这个文件需要找到同步的点和日志文件然后chage master即可。

 

解决方法

 

 

 change master to 

 

 master_host='211.103.156.198',

 

 master_user='同步帐号', 

 

 master_password='同步密码', 

 

 master_port=3306, 

 

 master_log_file='mysql-bin.000025

 

', 

 

 master_log_pos=1010663436

 

;

 

 

6、错误提示如下

 

 

Error 'Unknown column 'qdir' in 'field list'' on query. Default database: 'club'. Query: 'insert into club.question_del (id, pid, ques_name, givepoint, title, subject, subject_pid, createtime, approve, did, status, intime, order_d, endtime,banzhu_uid,banzhu_uname,del_cause,qdir) select id, pid, ques_name, givepoint, title, subject, subject_pid, createtime, approve, did, status, intime, order_d, endtime,'1521859','admin0523','无意义回复',qdir from club.question where id=7330212'

 

1 row in set (0.00 sec)

 

 

这个错误就说club.question_del 表里面没有qdir这个字段 造成的加上就可以了~

 

在主的mysql  里面查询 Desc club.question_del 

 

在 错误的从服务器上执行  alter table question_del add qdir varchar(30) not null;

 

 7、错误提示如下

  Slave_IO_Running: NO

 这个错误就是IO 进程没连接上  想办法连接上把 把与主的POS 号和文件一定要对然后重新加载下数据。具体步骤

slave stop;
change master to  master_host='IP地址',master_user='club',master_password='mima  ',master_log_file='mysqld-bin.000048',MASTER_LOG_POS=396549485;
注master_log_file='mysqld-bin.000048',MASTER_LOG_POS=396549485;是从主的上面查出 来的 show master status\G;

LOAD DATA FROM MASTER; 

load data from master

slave start;

问题解决

 

 

© 著作权归作者所有

共有 人打赏支持
aibati2008
粉丝 13
博文 86
码字总数 61386
作品 0
成都
技术主管
私信 提问
MySQL数据库半同步复制

半同步复制,是有一个从节点或者一部分从节点与主节点之间是同步复制的,其他的从节点仍是异步复制 半同步复制是谷歌公司贡献给MySQL的一个插件,默认在MySQL中没有此插件,所以要实现主从的...

a_pan
2017/11/14
0
0
MySQL · 引擎特性 · 从节点可更新机制

背景 主从集群,指由一个主数据库实例和多个从数据库实例组成,其中主数据库实例提供读写功能支持,而从数据库不提供对外服务或只提供只读功能支持,但也有从数据库提供读写功能支持,下面就...

阿里云RDS-数据库内核组
2017/06/04
0
0
django mysql 读写分离

最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来。 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类...

mstools
2015/07/30
0
0
电商总结(三)构建数据库的主从架构

  这段时间,一直在总结电商系统的相关基础技术和架构,写了很多东西。但是还是发现一个很重要,很基础的方面没有讲到,那就是数据库读写分离的主从架构。可能发展到大型成熟的公司之后,主...

章为忠
2016/03/03
0
0
一文了解数据库高可用容灾方案的设计与实现

一个系统可能包含很多模块,如数据库、前端、缓存、搜索、消息队列等,每个模块都需要做到高可用,才能保证整个系统的高可用。对于数据库服务而言,高可用的实现可能更加复杂,对用户的服务可...

UCloudTech
2018/08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【机器学习PAI实战】—— 玩转人工智能之商品价格预测

摘要: 我们经常思考机器学习,深度学习,以至于人工智能给我们带来什么?在数据相对充足,足够真实的情况下,好的学习模型可以发现事件本身的内在规则,内在联系。我们去除冗余的信息,可以...

zhaowei121
8分钟前
0
0
Spring拓展接口之FactoryBean,我们来看看其源码实现

是什么 FactoryBean的源码比较简单,大家可以细读下其注释,我做了简单的如下翻译 /** * 实现此接口的bean不能用作普通bean。此bean暴露的对象是通过getObject()创建的对象,而不是它自身...

java菜分享
12分钟前
1
0
Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用...

阿里云官方博客
18分钟前
0
0
深入理解 Hive 分区分桶 (Inceptor)

分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不关心的分区,快速定位,提高查...

hblt-j
26分钟前
0
0
数据结构

什么是数据结构 1、数据 数据是描述客观世界的数字、字符以及一切能够输入到计算机中,并且能够被计算机程序处理的符号集合。简言之,数据就是计算机加工处理的原料,是信息的载体。 2、数据...

stars永恒
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部