- 浏览: 2540018 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
有三个地址必须调试成功,
1 从库连接主库进行测试: mysql -h192.168.200.80 -urepluser -ptestpassword 此处必须连接成功
2 show master status;必须有相关显示
3 show slave status;
必须为
sudo vim /etc/mysql/my.cnf mysql 配置文件
sudo /etc/init.d/mysql restart 重启 mysql
数据库服务器 Master, 主机名 :DB01, IP: 192.168.1.80
数据库服务器 Slave, 主机名 :DB02, IP: 192.168.1.103
先配置 Master 的 mysql 环境 .
修改 mysql 的配置文件 my.cnf 确保有下面的信息 , 没有加上 . 有的话修改成下面这样 . 其他的可以保持默认配置 .
[mysqld]
log-bin = mysql-bin
server-id = 1
binlog-do-db = test // 要同步的表
GRANT REPLICATION SLAVE ON *.* TO repluser@192.168.200.103 IDENTIFIED BY 'testpassword';
从库连接主库进行测试: mysql -h192.168.200.80 -urepluser -ptestpassword
此处测试应该是通过的,否则 mysql 配置有问题
------- 比如 当在另一台机器上登录 mysql 时出现如下错误:
ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x' (111)
打开 /etc/mysql/my.cnf 文件,找到 bind-address = 127.0.0.1 修改为 bind-address = 0.0.0.0
-----
OK, 简单的 MySQL master 服务器配置到这里 .
重启 mysql 服务 , 登入 , 查看 master[show master status;] 状态 . 如下图 :
可通过 show master status 来监控主服务器的状态,内容如下:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 1164 | | |
+------------------+----------+--------------+------------------+
##### 其中 File 表示日志文件记录, Position 表示日志文件的位置,这个也是数据库执行复制操作的必须标识,后面两字段表示复制的数据库和不复制的数据库名,也可以在配置文件中你进行配置。
此处若不显示,说明配置也有问题。
再配置 Slave 的 mysql 环境 .
同样修改 my.cnf 配置文件 . 确保下面有如下信息 .
[mysqld] -- 最好是放在 [mysqld] 下面
server-id=2
master-host = 192.168.200.80
master-user = repluser
master-password = testpassword
master-port = 3306
master-connect-retry = 120
replicate-do-db = test
保存修改 , 重启 mysql 服务 . 登入数据库 , 可以看到 slave [show slave status;] 状态信息 . 如下图 :
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.200.80
Master_User: repluser
Master_Port: 3306
Connect_Retry: 120
Master_Log_File: mysql-bin.000007
Read_Master_Log_Pos: 1627
Relay_Log_File: mysqld-relay-bin.000009
Relay_Log_Pos: 1764
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1627
Relay_Log_Space: 1764
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
show slave status\G 如果发现有:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
就说明已经成功了,如果这两个选项不全是 Yes ,那就说明你钱面的某个配置错了,
我做的时候没有把主服务器重启,就出现 Slave_IO_Running: NO 。重启后好了
配置正常 .
简单的 MySQL 主从配置就 OK 了 . 当然这个是测试环境使用 . 生成环境还需要很多地方的优化配置 .
========================Slave_SQL_Running: No
解决办法一、 Slave_SQL_Running: No 2.也可能是slave机器重起后,事务回滚造成的. 解决办法二、 首先停掉Slave服务:slave stop 进入master mysql> show master status; 然后到slave服务器上执行手动同步: mysql> show slave status\G 手动同步需要停止master的写操作!
1.程序可能在slave上进行了写操作
一般是事务回滚造成的:
解决办法:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
到主服务器上查看主机状态:
记录File和Position对应的值
+----------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| localhost-bin.000094 | 33622483 | | |
+----------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> change master to
> master_host='master_ip',
> master_user='user',
> master_password='pwd',
> master_port=3306,
> master_log_file=localhost-bin.000094',
> master_log_pos=33622483 ;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)
*************************** 1. row ***************************
........
Master_Log_File: localhost-bin.000094
Read_Master_Log_Pos: 33768775
Relay_Log_File: localhost-relay-bin.000537
Relay_Log_Pos: 1094034
Relay_Master_Log_File: localhost-bin.000094
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
========================================
以下是一些备注,可看可不看。
stop slave reset slave start slave
----------- 今天发现 Mysql 不同步, show slave status 查看同步状态如下:
Slave_IO_Running: No
Slave_SQL_Running: Yes
使用 start slave 也不能同步。后来,先 slave stop 再 slave reset 再 slave start 就正常了。
====================== 手动同步
解决办法 I :
1. 首先停掉 Slave 服务: slave stop
到主服务器上查看主机状态:
记录 File 和 Position 对应的值。
mysql> show master status;
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.000020 | 135617781 | | |
+------------------+-----------+--------------+------------------+
1 row in set (0.00 sec)
3. 到 slave 服务器上执行手动同步:
mysql> change master to
> master_host='192.168.200.80',
> master_user='repluser',
> master_password='testpassword',
> master_port=3306,
> master_log_file='mysql-bin.000007',
> master_log_pos=98;
change master to master_host='192.168.12.203', master_user='repluser', master_password='admin@asdf', master_port=3306, master_log_file='binlog.000009', master_log_pos=1253;
4 slave start
===================== end 手动同步
1. 问题:主从服务器表类型的选择
一般的共识是主服务器使用innodb,事务,行锁等功能是myisam所没有的,对修改操作而言,它更高效;从服务器使用myisam,全文检索功能是innodb所没有的,对查询操作而言,它更高效。这样就可以各尽其能。
2. 问题:主从服务器字段类型的选择
字段类型对于分页等操作有很大影响。主服务器一般是innodb,因为不涉及查询,所以可以使用varchar等来存储字符串来节省空间,从服务器一般是 myisam,因为涉及查询,所以必须在char和varchar之间仔细权衡,没有varchar, text, blob字段的表是静态表,反之是动态表,静态表的检索效率要比动态表好若干倍,一般来说,所有涉及大结果集的查询都应该尽可能保证在静态表上完成,这里说一个例子:比如说常见的articles表有title(varchar), body(text)等字段,在做文章列表的时候,因为不是静态表,所以查询不会很快,下面开始重构解决方案:把原来的articles表拆分成 subjects表和contents表,title字段设置为一个足够的char类型放在subjects表里,body字段还保持是text类型放到 contents表里,subjects和contents表之间的关系是一对多,这样,顺带着也方便的实现了多页文章的功能,而且更重要的是在查询文章列表的时候,操作都是在subjects静态表里完成,效率肯定会比前一种方案提升很多。
强调:MyISAM里静态表和动态表的区别对性能影响极大,但我敢说很大一部分使用者并没有注意过这一点!如果你就是其中之一,那么我强烈建议你再次体会一下前面说的articles分解为subjects/contents的过程,相信你熟悉了以后,下一个应用的速度会有质的提升。
3. 问题:主从服务器读写分离时读操作失败
先重现一下问题:比如说添加一条新数据,添加成功后根据last_insert_id跳转到新添加数据的浏览页面。在此过程中添加新数据的操作是在主服务器上完成的,浏览新数据的操作实在从服务器上完成的,不过由于主从服务器间SQL同步存在延迟,所以当使用last_insert_id在从服务器上查询的时候,从服务器很可能还没有还没来得及同步到此记录,所以读操作失败。解决思路也不复杂,在代码里加入一个缓存层(可以使用 memcached),新添加的数据都顺手放到缓存层里一份,新数据的读操作也先查询缓存层,这样就不会再有读操作失败的问题了,当然删除或者更新数据的时候也要顺带着处理好缓存数据,可以使用观察者模式来搞定。不过这样缓存方案只限于读取单一的记录,对于读取列表的记录的情况,则是无效的。
4. 问题:主从服务器索引是否有必要保持一致
一般都是利用主从服务器完成读写分离,从服务器上进行读操作,主服务器进行写操作,这样的话,主服务器上仅保留主键,外键,唯一索引等必要的索引即可,以便保持数据合法性,而对于那些原本用于优化SELECT操作的索引,可以全部删除,如此的话主服务器的写操作效率会提升很多。把索引保持在从服务器上还有一个好处就是实际应用里,我们可能时常要通过ALTER TABLE去调整索引,而ALTER TABLE本身数据剧烈运动,会影响在线业务,为了规避影响,我们可以先停止一台从服务器,然后ALTER TABLE建好索引,然后再把从服务器启动,用这样的方法把所有的从服务器都建好索引,从而平滑的完成了ALTER TABLE操作。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
发表评论
-
mysql表修复
2015-04-07 10:16 102861.1命令myisamchk(必须停掉mysql服务,或者所操 ... -
Table_locks_immediate
2014-08-25 15:46 3070Table_locks_immediate表示立即释放表锁数 ... -
mysql分区
2014-02-21 10:38 1848mysql自5.1开始支持分区 ... -
InnoDB 引擎独立表空间 innodb_file_per_table
2013-02-25 11:14 1310http://deeplyloving.iteye.com ... -
mysql监测工具tuning-primer.sh
2013-01-21 17:57 2657【转】http://www.dbasky.net ... -
mysql主从日志的定期清理
2013-01-21 16:24 1154[转]http://wangwei007.blog.51 ... -
[转]Mysql报错:Result consisted of more than one row
2013-01-09 16:25 15868Error Code : 1172 Result consi ... -
根据bin log 分析管理员被莫名删除问题
2013-01-04 17:04 1164============== 根据bin log 分析管理 ... -
mysql中select * for update锁表的问题
2013-01-04 14:07 2509先前介绍过SELECT ... FOR UPDATE的用法 ... -
PDO报错:Cannot execute queries while other unbuffered queries are active.
2012-12-12 17:57 11931用 PDOStatement->execute() 执行 ... -
MySQL死锁导致无法查询
2012-12-11 14:51 2560客服反馈后台无法查询,原因大概知道,是因为MySQL的事务 ... -
mysql性能分析:mysql profiling 应用
2012-12-11 10:26 13451)先打开profiling ==> set pro ... -
mysql体系结构和查看当前的数据库请求
2012-12-07 15:00 2892mysql体系结构: 由 ... -
mysql_error:Error starting thread: Resource temporarily unavailable
2012-11-01 17:57 2110121031 18:53:17 InnoDB: Unable ... -
导出bin log时间段脚本datarecover.sh
2012-09-06 13:34 1243修改 _binlogdir='/data/mysql/m ... -
Mysql备份工具xtraback全量和增量测试
2012-08-17 14:58 3865【转载】http://blog.chinaunix.net/s ... -
数据库中的隔离级别和锁机制
2012-08-09 17:55 1585ANSI/ISO SQL92标准定义了 ... -
mysqldump和mysql命令
2012-08-03 13:44 1380========================= mys ... -
【汇总】mysql join
2012-07-18 11:35 1169标准SQL中CROSS JOIN交叉连接(笛卡尔积)和内连接I ... -
mysql cursor游标的使用,实例
2012-07-17 23:09 1812mysql被oracle收购后,从mysql-5.5开始, ...
相关推荐
配置Master/Slave环节中,需要修改ActiveMQ配置文件activemq.xml,在其中添加数据源配置,并调整persistenceAdapter的设置以适应JDBC方式的持久化。配置文件修改完成后,需要将修改后的配置文件复制到另一台虚拟机的...
MySQL的主从复制是数据库高可用性和数据冗余的一种常见实现方式,它允许数据从一个服务器(主服务器)同步到一个或多个其他服务器(从服务器)。这种架构在处理大量读取操作、提供故障切换能力以及分布式系统中尤其...
一、主从数据库(Master/Slave)同步配置 1. 什么是主从数据库(Master/Slave)同步配置? 主从数据库同步配置是一种数据库架构模式,用于将写入与读取操作分开,通过在两台数据库服务器之间进行数据复制来分担数据库...
MySQL的主从(Master-Slave)数据同步配置是一种常见的数据库高可用性和负载均衡解决方案,它允许数据在多个服务器之间复制,确保数据的一致性,并且可以在主服务器故障时提供故障转移。以下是对这一主题的详细说明...
它允许数据从一个主服务器(Master)实时同步到一个或多个从服务器(Slave)。在这种架构中,所有的写操作都在主服务器上执行,而从服务器则负责读操作,从而提高了系统的并发处理能力和数据安全性。 以下是如何在...
主要介绍了mysql(master/slave)主从复制原理及配置图文详解,以前脚本之家小编发过相关的内容,但这么好的非常少见特分享一下,需要的朋友可以参考下
MySQL5.6 数据库主从同步安装与配置详解(Master/Slave) 本篇文章主要介绍了MySQL5.6 数据库主从同步安装与配置详解,具有一定的参考价值,有兴趣的可以了解一下。 安装环境 操作系统 :CentOS 6.5 数据库版本:...
在 MySQL 主从同步配置中,存在两个主要组件:主服务器(Master)和从服务器(Slave)。主服务器是数据的源头,负责写入和更新数据,而从服务器则是数据的副本,负责读取和查询数据。 三、 主从同步配置的步骤 ###...
MySQL 5主从数据同步配置是一项重要的数据库管理任务,它能确保在主服务器(Master)上的数据更改能够实时地反映到副服务器(Slave)上,从而实现数据的冗余备份和高可用性。以下是一个详细的步骤说明,适用于RedHat...
在现代企业级应用中,为了确保数据的高度可用性和容灾能力,通常会采用MySQL的主从复制(Master-Slave Replication)机制来实现数据的同步。MySQL 5.7作为一款功能强大的关系型数据库管理系统,在数据同步方面提供了...
通过上述步骤,我们可以成功地在Mysql 5.1.7及以上版本中配置主从双向同步,这不仅增强了数据的安全性,还优化了数据的读写效率。然而,双向同步也带来了数据冲突的可能性,因此,在实际应用中,需要根据业务需求...
在本文中,我们将介绍如何在两台 MySQL 服务器之间实现单向同步,即将主服务器(master)的数据同步到从服务器(slave)上。 安装和配置 MySQL 服务器 首先,需要在两台服务器上安装 MySQL,并将其安装到 `/usr/...
在开发环境中,有时需要在两台MySQL数据库之间实现数据同步,以确保数据的一致性和冗余。本教程将详细介绍如何在两台运行相同系统(FreeBSD 5.4)和软件(Apache 2.0.55、PHP 4.4.0、MySQL 4.1.15)的服务器上配置...
以下是对MySQL Master-Slave同步配置的详细步骤和相关知识点的详解: 1. **配置文件修改**: 在MySQL的配置文件`/etc/mysql/my.cnf`中,为Master和Slave分别添加相应的配置段。`server-id`参数是必须的,用于区分...