摘抄自:http://www.ningoo.net/html/2007/mysql_replication_configuration.htm
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器(Master),而一个或多个其它服务器充当从服务器(Slave),利用该特
性实现读写分离,是很多大型网站常用的数据库架构。MySQL的replication的配置相对于Oracle来说,要简单的多。本文演示了在同一台
windows机器中配置单向异步复制的过程。这里的Replication是异步复制。MySQL的同步复制是MySQL
Cluster中的一个特性。
要启用复制特性,MySQL必须使用二进制日志。关于二进制日志的特性,请参考官方手册(5.0
,5.1
,6.0
)。
本例中MySQL的版本:
Master 配置
mysql> select version();
+————————-+
| version() |
+————————-+
| 5.0.37-community-nt-log |
+————————-+
1 row in set (0.00 sec)
主库配置文件my.ini
port=3306
datadir=”D:/Program Files/MySQL/MySQL Server 5.0/Data/” # 可选
server-id=1
log-bin=mysql-bin.log
binlog-ignore-db=mysql #第三行表示不记录数据库mysql的更新日志,这就避免了Master上的权限设置等被同步到Slave上
进入master, 运行如下命令:
创建复制用户
mysql>GRANT REPLICATION SLAVE ON *.* TO rep@localhost IDENTIFIED BY 'rep';
如果想要在Slave上有权限执行 "LOAD TABLE FROM MASTER"
或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的
FILE 和 SELECT 权限:
mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep@localhost IDENTIFIED BY 'rep';
接下来备份Master上的数据,首先执行如下SQL语句:
mysql>FLUSH TABLES WITH READ LOCK;
不要退出这个终端,否则这个锁就不生效了;接着导出数据,可以直接打包压缩数据文件,也可以使用mysqldump工具来做,推荐前者的方法,这样更为快捷简便。
Slave 配置
从库配置文件my2.ini
port=3307
server-id=2
log-slave-updates #启用从库日志,这样可以进行链式复制
read-only=1 #从库是否只读,0表示可读写,1表示只读
replicate-do-table=tablename #只复制某个表
replicate-wild-do-table=tablename% #只复制某些表(可用匹配符)
replicate-do-db=dbname #只复制某个库
replicte-wild-do-db=dbname% #只复制某些库
replicate-ignore-table=tablename #不复制某个表
replicate-wild-ignore-table=tablename% #不复制某些表
replicate-ignore-db=dbname #不复制某个库
relay-log-purge=1 #复制完的sql语句是否立即从中继日志中清除,1表示立即清除
report-host=hostname #从服务器主机,用于show slave hosts生成从库清单
master-host = localhost #主服务器名
master-user = rep #同步账户名,默认是test
master-password = rep #同步帐户密码,默认是空
master-port = 3306 #主服务器的 TCP/IP 端口号,默认是3306
replicate-ignore-db=mysql #略过同步的数据库名,如果有多个,请设置多次
replicate-do-db=test #想要同步的数据库名,如果有多个,请设置多次
read-only=1 #从库是否只读,0表示可读写,1表示只读
复制master库到slave库
初始化使用mysqldump来完成,将需要同步的表格结构复制到slave中。
启动从库
mysqld-nt –defaults-file=my2.ini
连接到从库进行配置
D:\>mysql -uroot -ppassword -P3307
mysql> start slave;
测试Replication
在主库
解开table的锁定
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
创建测试table,插入数据
mysql> use test
Database changed
mysql> create table testrep(i int);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into testrep values(1);
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
然后再到从库
查询
mysql> select * from testrep;
+——+
| i |
+——+
| 1 |
+——+
1 row in set (0.00 sec)
可见数据已经从主库复制到从库。
在从库的数据目录下,有几个和复制相关的文件需要说明一下:
*-reloay-bin.*
从主库同步过来的Bin log文件,也叫中继日志
master.info
主库帐号信息和同步信息,这里记录了复制用户名和密码,需要保护好权限。
relay-log.info
跟踪执行同步过来的Bin log的执行情况
通过show processlist可以查看主从库用于复制的相关进程(在windows上实际实现为线程)的信息
主库:
mysql> show processlist\G
*************************** 1. row ***************************
Id: 1
User: root
Host: localhost:3736
db: test
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 2
User: rep
Host: localhost:3745
db: NULL
Command: Binlog Dump
Time: 68
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
2 rows in set (0.00 sec)
可以看到Id为2的进程是用于复制的进程,state可用于监控复制的状态,具体含义参考官方文档。
从库:
mysql> show processlist\G
*************************** 1. row ***************************
Id: 1
User: root
Host: localhost:3741
db: test
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 88
State: Waiting for master to send event
Info: NULL
*************************** 3. row ***************************
Id: 3
User: system user
Host:
db: NULL
Command: Connect
Time: 51
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
3 rows in set (0.00 sec)
可以看到从库启动了两个复制进程,一个用于和主库交互,取得日志,另外一个则用于应用日志到从库。
MySQL的复制主要是通过解析主库的二进制日
志,然后再在从库应用来实现的。这种方式和Oracle
Streams的本质思想是一致的。通过MySQL自带的工具mysqlbinlog,可以dump出二进制日志中的具体内容,实际上就是一条条的sql
语句:
分享到:
相关推荐
胖子摸索出来的,Ubuntu上MySQL的Replication配置,的简单记录步骤
本篇文章将详细介绍如何配置MySQL的单向异步复制,以及如何进行主从库切换和验证。 首先,确保MySQL服务器支持并启用了二进制日志功能,因为复制依赖于主服务器上的二进制日志记录所有的DDL(数据定义语言)和DML...
#### 三、MySQL Replication 的配置步骤 根据提供的文档内容,以下是从Master到Slave的复制配置步骤: ##### 1. Master端配置 - **创建Slave用户的授权**: ```sql grant replication slave, replication ...
通过精心配置MySQL Replication的参数,我们可以实现在不创建额外数据库的情况下,仅复制特定表的目标。这不仅提高了数据管理的灵活性,还确保了数据的一致性和完整性。对于需要在不同数据库之间迁移数据或优化数据...
MySQL Group Replication作为一种先进的数据库复制解决方案,不仅提供了强大的数据一致性和可靠性保障,还具备灵活的配置选项和高性能的特点。随着技术的不断发展和完善,它将在更多的应用场景中发挥重要作用。
MySQL Replication是MySQL数据库系统中的一个重要特性,它允许数据从一个主服务器(master)自动同步到一个或多个从服务器(slaves)。这种技术主要用于数据备份、负载均衡和高可用性设置,确保即使在主服务器出现...
- **主从同步**:支持创建和管理MySQL的主从复制配置,帮助实现数据的无损迁移。 - **故障恢复**:在主服务器故障时,能够快速切换到从服务器,保证服务的连续性。 4. **应用场景** - **数据备份与恢复**:利用...
MySQL Replication是一种数据库复制技术,允许数据从一个MySQL服务器(主服务器)实时同步到其他一个或多个MySQL服务器(从服务器)。这种技术对于实现高可用性、负载均衡和数据备份至关重要。以下是对一主多从环境...
根据提供的文件信息,我们可以深入探讨MySQL数据库主从复制的相关配置及步骤。MySQL主从复制是一种常用的数据冗余机制,能够实现数据的实时备份,并在主服务器出现故障时快速切换到从服务器,保证业务的连续性。接...
PyMySQL是一个流行的Python MySQL驱动程序,它实现了Python与MySQL之间的连接,支持Python的异步操作。而“python-mysql-replication”库则进一步扩展了PyMySQL的功能,通过解析MySQL的二进制日志,实现了对复制协议...
MySQL复制(Replication)是MySQL数据库系统中一种强大的功能,它允许数据从一个服务器(主服务器)异步地复制到一个...通过深入研究PPT资源,你可以更全面地了解MySQL Replication的工作原理、配置细节以及最佳实践。
### MySQL Replication 主从复制与读写分离配置详解 #### 一、背景介绍 MySQL replication是一种数据复制技术,主要用于实现数据库的高可用性、负载均衡和数据备份等场景。通过搭建主从复制环境,可以实现在多台...
### 使用MMM实现MySQL Replication的高可用 #### MMM (Master-Master Replication Manager for MySQL) ...在实际部署过程中,还需要进一步配置MySQL参数以及MMM相关设置,以确保系统的稳定性和可靠性。
【MySQL Replication数据库集群解决方案】 在构建电子商务系统数据库时,常常面临单一服务器处理能力和网络带宽不足的问题,以及对系统可靠性的高要求和快速故障恢复的需求。随着用户数量的增加,需要灵活扩展...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,而Python是一种强大的编程语言,被广泛用于数据库操作、数据分析和自动化任务。在MySQL的高可用性架构中,复制技术扮演着关键角色,允许数据在多个服务器之间同步...
MySQL Replication(复制)已经在一些著名的网站和企业广泛应用以将数据库的扩展性提升到极限水平。对用户而言可以简单快速地为数据库创建多个副本,超越单个数据库实例容量的限制,弹性扩展数据库系统以满足快速增长...