- 浏览: 707419 次
- 性别:
- 来自: 陕西
文章分类
- 全部博客 (132)
- java thread (2)
- web (32)
- JDK Executor (2)
- JDK Collection (5)
- spring security exception (3)
- openfire Source Learning (1)
- java common (4)
- YUI (1)
- spring (1)
- eclipse (4)
- lucene (0)
- heritrix (1)
- Exception (1)
- mySQL (24)
- xml (3)
- Learning Program (1)
- Encoding (1)
- LoadRunner (2)
- Linux (22)
- JQuery (3)
- Tomcat (2)
- ORACLE (0)
- MSM--SOURCES--1.5.0 (1)
- MAVEN (2)
- Go (3)
- UML (1)
- Python (1)
- C (1)
- ubuntu tools (3)
- fenxi (1)
- excel (1)
- jenkins (1)
最新评论
-
liubey:
miwucc 写道博主你好。我刚用msm。sticky的配置下 ...
Tomcat session共享 —MSM -
xxtianxiaxing:
没有特殊的配置,应该从你的代码端排查下,我曾经遇到过,在sti ...
Tomcat session共享 —MSM -
unsoundboy:
这种方式在第一次的时候可行,但是再次请求session就变化了 ...
Tomcat session共享 —MSM -
zhoumax:
你好,看了你的文章 ,想请教一个问题:
我在opensuse下 ...
keepalived 安装错误 -
xxtianxiaxing:
...
JQuery -- this 和 $(this) 的区别
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器(Master),而一个或多个其它服务器充当从服务器(Slave),利用该特性实现读写分离,是很多大型网站常用的数据库架构。MySQL的replication的配置相对于Oracle来说,要简单的多。本文演示了在同一台windows机器中配置单向异步复制的过程。这里的Replication是异步复制。MySQL的同步复制是MySQL Cluster中的一个特性。
要启用复制特性,MySQL必须使用二进制日志。关于二进制日志的特性,请参考官方手册(5.0,5.1,6.0)。
本例中MySQL的版本:
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
从库配置文件my2.ini
port=3307
datadir=”D:/Program Files/MySQL/MySQL Server 5.0/Data2/”server-id=2
#启用从库日志,这样可以进行链式复制
log-slave-updates#从库是否只读,0表示可读写,1表示只读
read-only=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#复制完的sql语句是否立即从中继日志中清除,1表示立即清除
relay-log-purge=1#从服务器主机,用于show slave hosts生成从库清单
report-host=hostname
启动主库
mysqld-nt –defaults-file=my.ini
连接到主库中,创建复制用户
D:\>mysql -uroot -ppassword -P3306
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.37-community-nt-log MySQL Community Edition (GPL)mysql> grant replication slave on *.* to ‘rep’@'localhost’ identified by ‘rep’;
Query OK, 0 rows affected (0.00 sec)
锁住主库的table,以便备份数据文件到从库进行初始化
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
显示主库状态,注意记下当前二进制日志文件名和position
mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000002 | 228 | | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
将D:/Program Files/MySQL/MySQL Server 5.0/Data/下的内容打包复制到D:/Program Files/MySQL/MySQL Server 5.0/Data2/下,执行从库的初始化。当然,初始化也可以使用mysqldump来完成。
另外开启一个cmd,启动从库
mysqld-nt –defaults-file=my2.ini
连接到从库进行配置
D:\>mysql -uroot -ppassword -P3307
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.37-community-nt-log MySQL Community Edition (GPL)Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> CHANGE MASTER TO
-> MASTER_HOST=’localhost’,
-> MASTER_USER=’rep’,
-> MASTER_PASSWORD=’rep’,
-> MASTER_LOG_FILE=’mysql-bin.000002′,
-> MASTER_LOG_POS=228;
Query OK, 0 rows affected (0.01 sec)
注意到这里master_log_file和master_log_pos就是前面show master status的结果。
启动复制进程
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
至此配置基本完成,在主库解开table的锁定
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
创建测试table,插入数据
mysql> use test
Database changedmysql> 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语句:
D:\Program Files\MySQL\MySQL Server 5.0\data>mysqlbinlog mysql-bin.000002
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#071201 13:17:31 server id 1 end_log_pos 98 Start: binlog v 4, server v 5.0.37-community-nt-log created 071201 13:17
:31 at startup
# Warning: this binlog was not closed properly. Most probably mysqld crashed writing it.
ROLLBACK/*!*/;
# at 98
#071201 13:18:43 server id 1 end_log_pos 228 Query thread_id=1 exec_time=0 error_code=0
SET TIMESTAMP=1196486323/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
grant replication slave on *.* to ‘rep’@'localhost’ identified by ‘rep’/*!*/;
# at 228
#071201 13:24:43 server id 1 end_log_pos 89 Query thread_id=1 exec_time=0 error_code=0
use test/*!*/;
SET TIMESTAMP=1196486683/*!*/;
insert into test values(6)/*!*/;
# at 317
#071201 13:24:43 server id 1 end_log_pos 344 Xid = 14
COMMIT/*!*/;
# at 344
#071201 13:28:00 server id 1 end_log_pos 434 Query thread_id=1 exec_time=0 error_code=0
SET TIMESTAMP=1196486880/*!*/;
create table testrep(i int)/*!*/;
# at 434
#071201 13:28:11 server id 1 end_log_pos 92 Query thread_id=1 exec_time=0 error_code=0
SET TIMESTAMP=1196486891/*!*/;
insert into testrep values(1)/*!*/;
# at 526
#071201 13:28:11 server id 1 end_log_pos 553 Xid = 19
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
发表评论
-
mysql
2012-02-27 21:53 843select * from ques a where (sel ... -
mysql procedure
2010-02-05 13:08 1125DELIMITER $$DROP PROCEDURE ... -
update left join, delete left join
2010-02-02 14:49 1464MYSQL LEFT JOIN UPDATE: ... -
本机无法访问 mysql,远程可以访问
2010-01-30 14:34 7053案例:本机无法访问 mysql,远程可以访问,修改过系统名字; ... -
mysql Master-Slaver 配置
2010-01-06 16:20 1472IP: master:10.30.0. ... -
mysql 安装 错误
2010-01-06 15:00 2983mysql安装错误排查 查看mysql-server 的状态 ... -
MySQL Cluster ndb_mgm 错误
2010-01-06 09:56 2303//ndb启动 [root@localhost ~]# nd ... -
MySQL my.cnf 中文版
2010-01-06 09:01 1243引用:http://www.phpv.net/html ... -
MySQL Cluster 备份与恢复
2010-01-05 15:45 42281、在管理节点上进行备份。 ndb_mgm> star ... -
MySQL Cluster 命令
2009-12-25 14:00 1187//二进制安装访问需带路径 //mysql-cluster-g ... -
Linux Mysql Exception List
2009-12-13 14:10 1387MySQL manager or server PID f ... -
MySQL源码包在Linux上安装和配置
2009-12-11 09:00 14161.1 MySQL简介 MySQL服务概述 MySQL是当 ... -
Linux Mysql Install
2009-12-09 16:51 1216//安装 [root@test1 local]#rpm ... -
MySQL Cluster(MySQL 集群) 初试
2009-12-08 14:06 1014引用MySQL Cluster 是MySQL适合于分布式计算环 ... -
Mysql SQL Execption Note
2009-12-03 09:10 12131,创建表时,vachar 需指定大小 ... -
Mysql Base Performance Learning
2009-11-17 16:03 998事务安全表(TST) 比起非事务安全表 (NTST)有几大 ... -
Mysql Configuration Learning
2009-11-17 16:00 1065.frm 文件来保持表和列 ... -
mysql SQL cache
2009-11-14 10:27 1741Query Cache(QC) ... -
Mysql Select Optimization
2009-11-13 17:20 1003SELECT count(*) FROM tablenam ... -
MySQL数据库如何做好优化
2009-11-13 16:05 991碰到过好几次这样的题目,可每次都不能答的完全正确,现在大概列出 ...
相关推荐
同时,监控工具如MySQL Replication Monitor可以帮助检测复制延迟和错误,及时进行故障排查。 五、注意事项与优化 1. **延迟问题**:主从复制可能会存在延迟,特别是在高并发环境下。可以通过优化网络、减少binlog...
### MySQL 5.5 Master-Slave (Replication) 主从配置详解 #### 一、基础知识概述 在MySQL中,**主从复制(Master-Slave Replication)**是一种非常重要的数据备份方式,通过它可以在多台服务器之间实现数据的同步...
MySQL的主主复制(Master-Master Replication)是一种高可用性解决方案,它允许两个或多个数据库服务器互相复制数据,形成一个集群。在这种模式下,每个节点既是主节点,也是从节点,可以接受读写操作。当一个节点...
在MySQL数据库系统中,主从复制(Master-Slave Replication)是一种常用的数据冗余和负载均衡策略。这种模式允许数据从一个主服务器(Master)实时同步到一个或多个从服务器(Slave)。当主服务器上的数据发生变化时...
### MySQL 5.5 Master-Slave (Replication) 配置详解 #### 一、基础知识简介 在深入了解具体的配置步骤之前,我们首先简要回顾一下MySQL中的Master-Slave复制机制的基础概念。 - **主从复制(Master-Slave ...
MySQL的Master-Slave架构是一种常见的数据库高可用性和负载均衡解决方案。它允许数据从一个主服务器(Master)实时同步到一个或多个从服务器(Slave)。在这种架构中,所有的写操作都在主服务器上执行,而从服务器则...
Master-Slave的数据库机构解决了很多问题,特别是read/write比较高的web2.0应用: 1、写操作全部在Master结点执行,并由Slave数据库结点定时(默认60s)读取Master的bin-log 2、将众多的用户读请求分散到更多的...
mysql> grant replication slave on *.* to 'sree'@'%' Refresh permissions mysql> flush privileges mysql> show master status; | File | Position | master-bin.000004 | 120 Slave configuration =...
MySQL Replication 是一种数据复制机制,它允许将一个MySQL服务器(主服务器或Master)的数据异步复制到一个或多个其他MySQL服务器(从服务器或Slave)。这种机制主要用于实现数据库负载均衡、提高读取性能以及备份...
- **跳过从服务启动**:`skip-slave-start`配置项避免了从服务器在启动时自动开始复制操作,这通常在初始化配置时使用。 - **二进制日志**:虽然从服务器不需要生成二进制日志,但这里也配置了相关的参数,如`log-...
to chain replication and switching a slave from chain replication to master-slave is something that will interest the readers. Chapter 10, Table Maintenance, covers cloning tables. Managing big tables...
slave_sql_delay = result['Seconds_Behind_Master'] if slave_sql_delay > 60: # 执行故障转移或通知操作 ``` 总的来说,PyMySQL是Python开发者在处理MySQL数据库时的强大工具,尤其在实现MySQL主从复制的自动...
log-slave-updates #启用从库日志,允许链式复制 read-only=1 #设置为只读模式 ``` 为了实现数据复制,需要在主服务器上创建一个专门用于复制的用户,并赋予适当的权限: ```sql mysql> CREATE USER 'rep'@'%' ...
MySQL-MM (Multi-Master Replication Manager) 是一种用于MySQL数据库的高可用性和负载均衡解决方案,它支持多主复制,允许数据在多个主节点之间双向同步。以下是对MySQL-MMM安装的详细步骤和基本配置的说明。 首先...