`
liudaoru
  • 浏览: 1578770 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 主从配置 [z]

阅读更多

From: http://blog.csdn.net/phphot/archive/2008/04/06/2255011.aspx

 

最近将四台MySQL服务器配置成主从模式以实现一定的负载均衡,好象还可以接受,至少现在没有出什么大问题。

MySQL同步机制基于master把所有对数据库的更新、删除等)都记录在二进制日志里。因此,想要启用同步机制,在master就必须启用二进制日志。每个slave接受来自master上在二进制日志中记录的更新操作,因此在slave上执行了这个操作的一个拷贝。应该非常重要地意识到,二进制日志只是从启用二进制日志开始的时刻才记录更新操作的。所有的 slave必须在启用二进制日志时把master上已经存在的数据拷贝过来。如果运行同步时slave上的数据和master上启用二进制日志时的数据不一致的话,那么slave同步就会失败。把master上的数据拷贝过来的方法之一实在slave上执行 LOAD DATA FROM MASTER 语句。不过要注意,LOAD DATA FROM MASTER 是从MySQL 4.0.0之后才开始可以用的,而且只支持master上的 MyISAM 类型表。同样地,这个操作需要一个全局的读锁,这样的话传送日志到slave的时候在master上就不会有更新操作了。当实现了自由锁表热备份时(在 MySQL 5.0中),全局读锁就没必要了。由于有这些限制,因此我们建议只在master上相关数据比较小的时候才执行 LOAD DATA FROM MASTER 语句,或者在master上允许一个长时间的读锁。由于每个系统之间 LOAD DATA FROM MASTER 的速度各不一样,一个比较好的衡量规则是每秒能拷贝1MB数据。这只是的粗略的估计,不过master和slave都是奔腾700MHz的机器且用 100MBit/s网络连接时就能达到这个速度了。slave上已经完整拷贝master数据后,就可以连接到master上然后等待处理更新了。如果 master当机或者slave连接断开,slave会定期尝试连接到master上直到能重连并且等待更新。重试的时间间隔由 --master-connect-retry 选项来控制,它的默认值是60秒。每个slave都记录了它关闭时的日志位置。msater是不知道有多少个slave连接上来或者哪个slave从什么时候开始更新。

MySQL同步功能由3个线程(master上1个,slave上2个)来实现。执行 START SLAVE 语句后,slave就创建一个I/O线程。I/O线程连接到master上,并请求master发送二进制日志中的语句。master创建一个线程来把日志的内容发送到slave上。这个线程在master上执行 SHOW PROCESSLIST 语句后的结果中的 Binlog Dump 线程便是。slave上的I/O线程读取master的 Binlog Dump 线程发送的语句,并且把它们拷贝到其数据目录下的中继日志(relay logs)中。第三个是SQL线程,salve用它来读取中继日志,然后执行它们来更新数据。如上所述,每个mster/slave上都有3个线程。每个 master上有多个线程,它为每个slave连接都创建一个线程,每个slave只有I/O和SQL线程。在MySQL 4.0.2以前,同步只需2个线程(master和slave各一个)。slave上的I/O和SQL线程合并成一个了,它不使用中继日志。slave上使用2个线程的优点是,把读日志和执行分开成2个独立的任务。执行任务如果慢的话,读日志任务不会跟着慢下来。例如,如果slave停止了一段时间,那么 I/O线程可以在slave启动后很快地从master上读取全部日志,尽管SQL线程可能落后I/O线程好几的小时。如果slave在SQL线程没全部执行完就停止了,但I/O线程却已经把所有的更新日志都读取并且保存在本地的中继日志中了,因此在slave再次启动后就会继续执行它们了。这就允许在 master上清除二进制日志,因为slave已经无需去master读取更新日志了。执行 SHOW PROCESSLIST 语句就会告诉我们所关心的master和slave上发生的情况。

下面我们来具体配置

1. 在主服务器上为从服务器建立一个用户:

grant replication slave on *.* to '用户名'@'主机' identified by '密码'; (在MySQL 4.0.2以前,用 FILE 权限来代替 REPLICATION SLAVE)

如果打算在slave上执行 LOAD TABLE FROM MASTER 或 LOAD DATA FROM MASTER 语句,那么必须给该帐户授予附加权限:
授予全局 SUPER 和 RELOAD 权限。

mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep@rep2 IDENTIFIED BY 'rep';


授予对想要加载的所有表上的 SELECT 权限。在master上任何没有 SELECT 权限的表都会被 LOAD DATA FROM MASTER 略过。

2. 编辑主服务器的配置文件:/etc/my.cnf

server-id = 1
log-bin
binlog-do-db=需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
binlog-ignore-db=不需要备份的数据库苦命,如果备份多个数据库,重复设置这个选项即可


3. 编辑从服务器的配置文件:/etc/my.cnf

server-id=2 (配置多个从服务器时依次设置id号)
master-host=主机
master-user=用户名
master-password=密码
master-port=端口
replicate-do-db=需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可

记得先手动同步一下主从服务器中要备份的数据库,然后重启主,从服务器。

要验证主从设置是否已经成功,可以登录从服务器输入如下命令:

mysql> show slave status\G

得到的列表会有类似下面的数据:

Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果后面两个选项不全是Yes,那就说明你前面某个步骤配置错了。

如果你的设置是正确的,尝试在主服务器上插入若干条记录,然后你再转到从服务器,会发现相应的新记录已经自动同步过来了。

如果你的主从服务器已经配置好了,那么你在应用程序中,只要保证所有的insert/delete/update操作是在主服务器上进行的,那么相应的数据变化会自动同步到从服务器上,这样,我们就可以把select操作分担到多台从数据库上,从而降低服务器的载荷。

如果你想使用复制数据文件的方式来备份数据库,只要在从服务器上的mysql命令行先键入slave stop;然后复制数据库文件,复制好了,再在mysql命令行键入slave start;启动从服务器,这样就即备份了数据有保证了数据完整性,而且整个过程中主服务器的mysql无需停止。

-----------------------------------------------------------------------------------

提示:如果修改了主服务器的配置,记得删除从服务器上的master.info文件。否则从服务器使用的还是老配置,可能会导致错误。

-----------------------------------------------------------------------------------

注意:关于要复制多个数据库时,binlog-do-db和replicate-do-db选项的设置,如果要备份多个数据库,只要重复设置相应选项就可以了。

比如:

binlog-do-db=a
binlog-do-db=b

replicate-do-db=a
replicate-do-db=b

-----------------------------------------------------------------------------------

补充:
在从服务器上使用show slave status
Slave_IO_Running,为No,则说明IO_THREAD没有启动,请执行slave start [IO_THREAD]
Slave_SQL_Running为No则复制出错,查看Last_error字段排除错误后执行slave start [SQL_THREAD]

查看Slave_IO_State字段
空 //复制没有启动
Connecting to master//没有连接上master
Waiting for master to send event//已经连上

补充:可以使用LOAD DATA FROM MASTER语句来建立slave。但有约束条件:
数据表要全部是MyISAM表,必须有SUPER权限,master的复制用户必须具备RELOAD和SUPER权限。
在master端执行RESET MASTER清除已有的日志变更,
此时slave端会因为找不到master日志无法启动IO_THREAD,请清空data目录下
relay-log.info,hosname-relay-bin*等文件重新启动mysql
中继日志文件默认的文件为hostname-relay-bin.nnn和hostname-relay-bin.index。可用从服务器的--
relay-log和--relay-log-index选项修改。在从服务器中还有一个relay-log.info中继信息文件,可用
--relay-log-info-file启动选项修改文件名。
双机互备则是两个mysql同时配置为master及slave

主服务器上的相关命令:
show master status
show slave hosts
show logs
show binlog events
purge logs to 'log_name'
purge logs before 'date'
reset master(老版本flush master)
set sql_log_bin=

从服务器上的相关命令:
slave start
slave stop
SLAVE STOP IO_THREAD //此线程把master段的日志写到本地
SLAVE start IO_THREAD
SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库
SLAVE start SQL_THREAD
reset slave
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
load data from master
show slave status(SUPER,REPLICATION CLIENT)
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master信息
PURGE MASTER [before 'date'] 删除master端已同步过的日志



以下是mysql-5.0.33例子

主服务器my.cnf

#######################################

[mysqld]
port            = 3306
#socket          = /tmp/mysql.sock
log-bin=mysql-bin
server-id       = 1
port            = 3306

table-cache=500
max-connections=1000
key_buffer = 700M
long_query_time=1
log_slow_queries= slow_query.log
sort_buffer = 128M


[mysqldump]
quick
max_allowed_packet = 16M

#######################################################



从服务器my.cnf

########################################################

# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock

# The MySQL server
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer = 300M
max_allowed_packet = 1M
table_cache = 500
query_cache_size=16777216
sort_buffer_size=10485760

max-connections=1000

log-bin
#server-id=slave_id
server-id       = 7

master-host     =   192.168.0.92

master-user     =   rep

master-password =   123

master-port     =  3306

replicate-ignore-db=mysql

skip-slave-start


slave-skip-errors=1064 1146


[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

###################################################

分享到:
评论

相关推荐

    mysql主从复制搭建.docx

    ### MySQL主从复制知识点 #### 一、MySQL主从复制概念与原理 **主从复制**是MySQL中一种常见的高可用性解决方案,主要用于实现数据的冗余存储与负载均衡。其核心思想是通过日志在从数据库上重复主数据库的操作来...

    Linux系统安装通用MySQL8,及主从配置.7z

    在Linux系统中安装MySQL8并配置主从复制是一项常见的任务,尤其对于那些需要高可用性和数据一致性的企业级应用。MySQL8是目前广泛使用的数据库管理系统,它提供了许多增强的功能和性能改进。以下将详细介绍如何在...

    MySQL 1z0-883 题库demo

    8. **复制技术**:理解主从复制的工作原理,配置和管理复制拓扑,以及解决复制故障。 9. **故障排查与日志分析**:学习如何解读错误日志,使用慢查询日志进行性能问题定位,以及如何使用General Query Log进行审计...

    MySQL85题版本1z0-888.pdf

    MySQL 5.7题库指的是针对MySQL数据库版本5.7的习题集,其中包含85道题目,题库被标记为1z0-888,意味着这些题目与Oracle认证的MySQL 5.7 OCP(Oracle Certified Professional)考试相关。考生准备这一认证时,这些...

    MySQL Server 8.0.7z

    在安装和配置上,MySQL 8.0的安装向导和配置工具也变得更加友好,使得新用户能更容易地设置和管理数据库服务器。同时,提供了一套完整的命令行工具,如`mysql`, `mysqldump`, `mysqladmin`等,方便用户进行日常维护...

    MySQL 5.7 OCP(1Z0-888)题库测试及答案.rar

    - 熟悉主从复制的配置,包括异步和半同步复制。 - 学习组复制(Group Replication)的概念和实现。 - 掌握故障切换和监控复制状态的工具。 8. **高级特性**: - 学习分区表的使用,以及其对查询性能的影响。 -...

    mysql-5.6.40-winx64.7z

    这个"mysql-5.6.40-winx64.7z"压缩包包含了在Windows操作系统上运行MySQL 5.6.40版本所需的所有文件。MySQL 5.6是MySQL的一个重要版本,它在性能、可扩展性、安全性和稳定性方面都有显著提升。 首先,MySQL 5.6引入...

    MySQL.7z

    3. **复制功能**:MySQL 5.5支持主从复制,允许数据在多个服务器之间同步,用于高可用性和负载均衡。 4. **分区功能**:支持大表的分区,以提高查询效率和管理大量数据的能力。 5. **新的SQL特性**:如窗口函数、...

    redis mongodb mysql.7z

    标题 "redis mongodb mysql.7z" 提供了一个包含多种数据库技术资源的压缩包,主要涵盖了Redis、MongoDB和MySQL在Windows环境下的安装和使用。这些数据库在IT领域中都有着广泛的应用,分别作为键值存储、文档型数据库...

    mysql+haproxy

    在这个实践中,我们将探讨如何设置 MySQL 主从复制和使用 HAProxy 进行读写分离。 **MySQL 主从复制** 主从复制是 MySQL 数据库的一个核心特性,它允许数据从一个服务器(主服务器)异步地复制到一个或多个服务器...

    1z0-888 MYSQL5.7 OCP

    标题中提到的“1z0-888 MYSQL5.7 OCP”意味着这是一个关于Oracle认证的MySQL 5.7数据库管理员的专业考试。OCP代表Oracle Certified Professional,是Oracle公司提供的专业资格认证之一,面向的是对数据库技术具备...

    MYSQL 5.0Z中文手册

    MySQL的主从复制技术可以实现数据的实时同步,构建高可用性的系统。此外,也会介绍MySQL集群的配置和管理。 11. **安全性**: 设置用户权限,使用GRANT和REVOKE命令控制访问,以及如何加密数据以增强安全性。 12...

    mysql-connector-java-5.1.32.7z

    9. **故障转移与高可用**:如果 MySQL 集群配置了主从复制或集群,可以在主数据库故障时自动切换到备用节点,确保服务连续性。 10. **监控与日志**:监控 MySQL 和 Hive 的连接状态以及错误日志,对于及时发现并...

    MyCat 第3天-part1.7z

    3. **MySQL主从复制配置**:在大规模数据处理中,数据冗余和备份是关键。`03. MyCat - 集群 - MySQL主从复制配置.avi`将教你如何设置MySQL的主从复制,以确保数据的安全性和一致性。 4. **MyCat安装与配置**:`04. ...

    mysql入门到深入

    在“mysql系列1-入门.txt”中,你将学习MySQL的基础知识,包括安装配置MySQL服务器、创建与管理数据库、数据表以及数据类型。SQL(结构化查询语言)是与数据库交互的主要工具,这里会介绍如何使用INSERT、SELECT、...

    mysql5.7.37-winx64.zip

    1. **my.ini配置文件**:这是MySQL的配置文件,用于设置服务器的各种参数,如端口号、数据存储位置、内存分配等。 2. **数据目录**:MySQL的数据文件(如ibdata1、ib_logfile等)将存储在这里,用户需要指定一个合适...

    MySQL Monitor(MySQL监视器).7z

    本压缩包“MySQL Monitor(MySQL监视器).7z”可能包含了该工具的相关应用程序、配置文件、文档资料等。 在MySQL的管理与优化中,监控是非常关键的一环。以下是一些关于MySQL监控的重要知识点: 1. **监控指标**:...

    mysql ocp认证考试题库

    "mysql ocp认证考试题库"包含两套完整的模拟试题,1Z0-883是该认证的考试代码,表示考生将面临的一系列测试内容。 1. **MySQL基础知识** - 数据库概念:理解关系型数据库的基本原理,包括ACID属性(原子性、一致性...

    mysql-5.6.26.7z

    本压缩包"mysql-5.6.26.7z"包含了MySQL 5.6.26的所有源代码和相关文件,适合开发者进行深度定制和学习研究。 在MySQL 5.6.26中,重点优化了查询性能,特别是对于复杂的联接操作和子查询,引入了并行查询优化器,...

    mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz.7z

    MySQL还支持复制技术,可以实现主从复制或组复制,以提高系统的可用性和数据的一致性。 总之,"mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz.7z"是一个包含MySQL 8.0.23完整安装的压缩包,适用于特定版本的Linux...

Global site tag (gtag.js) - Google Analytics