Chinaunix

标题: 求助mysql集群数据同步问题 [打印本页]

作者: xpingtn    时间: 2008-01-09 09:01
标题: 求助mysql集群数据同步问题
mysql集群数据同步问题
我用mysql-max-5.1.5-alpha-linux-i686搭建了一个集群,配制过程中没有出现任错误,两个节点也正常启动
在管理节点服务器上运行ndb_mgm显示如下:
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.98  (Version: 5.1.5, Nodegroup: 0)
id=3    @192.168.0.99  (Version: 5.1.5, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.97  (Version: 5.1.5)

[mysqld(API)]   2 node(s)
id=4    @192.168.0.99  (Version: 5.1.5)
id=5    @192.168.0.98  (Version: 5.1.5)
连接也是正常,我在192.168.0.99服务器上建一个数据库和一张表,就是不能同步到192.168.0.98服务器上,不知道是什么问题??
看网上发表的很多文档,只说在master上建一个数据和一张表,就能自动同步到slave服务器上,哪位高手能帮我解决一下这个数据
同步问题,并说明一下,它的同步机制是怎么样的?
作者: xinyv    时间: 2008-01-09 09:28
贴my.cnf文件.
作者: xpingtn    时间: 2008-01-09 10:22
master 与slave主机上my.cnf
[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.97
[mysql_cluster]
ndb-connectstring=192.168.0.97
[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

mysql集群,同步数据不用在my.cnf上设置吧?
作者: xinyv    时间: 2008-01-09 10:37
主要设置同步那个库。
binlog-do-db
从要设置
主的一些信息,如用户名,密码,端口等等
作者: doking2008    时间: 2008-01-09 10:46
确保从服务器能过通过mysql链接主服务器。
作者: xpingtn    时间: 2008-01-09 11:11
我做的是mysql集群,不是那种master/slave的主从复制。
作者: xpingtn    时间: 2008-01-09 12:32
MYSQL集群实验

实验目的:构建MYSQL簇,并测试MYSQL簇的工作性能。

需要安装的软件包:
服务端:mysql-max-5.1.5-alpha-linux-i686-glibc23.tar.gz
客户端:MySQL-client-community-5.0.45-0.rhel4.i386.rpm

配置环境:

Server1: mysql1.vmtest.net 192.168.0.1
Server2: mysql2.vmtest.net 192.168.0.2
Server3: mysql3.vmtest.net 192.168.0.3

Servers1和Server2作为实际配置MySQL集群的服务器。Server3作为管理节点,Server3的系统进行很小的调整并且无需安装MySQL。


[安装过程]
一、在Server1和Server2上安装mysql-max

注意:必须是max版本的MySQL,普通版本不支持集群部署!

以下步骤需要在Server1和Server2上各做一次

# groupadd mysql
# useradd -g mysql mysql
# tar -zxvf mysql-max-5.1.5-alpha-linux-i686-glibc23.tar.gz      -C  /usr/ local
# mv mysql-max-5.1.5-alpha-linux-i686-glibc23 mysql
# cd mysql
# scripts/mysql_install_db --user=mysql
# chown -R root  .
# chown -R mysql data
# chgrp -R mysql .
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld

此时不要启动MySQL!


二、安装并配置管理节点服务器(Server3)

作为管理节点服务器,Server3需要ndb_mgm和ndb_mgmd两个文件:

# mkdir /usr/src/mysql-mgm
# cd /usr/src/mysql-mgm
# 将mysql-max-5.1.5-alpha-linux-i686-glibc23.tar.gz复制到当前目录
# tar -zxvf mysql-max-5.1.5-alpha-linux-i686-glibc23.tar.gz
# rm mysql-max-5.1.5-alpha-linux-i686-glibc23.tar.gz
# cd mysql-max-5.1.5-alpha-linux-i686-glibc23/bin
# chmod +x ndb_mg*
# mv ndb_mg* /usr/bin/
# cd
# rm -rf /usr/src/mysql-mgm

三、开始为这台管理节点服务器建立配置文件:

# mkdir /var/lib/mysql-cluster
# cd /var/lib/mysql-cluster
# vi config.ini

#在config.ini中添加如下内容:

[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Managment Server
[NDB_MGMD]
HostName=192.168.0.3 #管理节点服务器Server3的IP地址
# Storage Engines
[NDBD]
HostName=192.168.0.1 #MySQL集群Server1的IP地址
DataDir= /var/lib/mysql-cluster
[NDBD]
HostName=192.168.0.2 #MySQL集群Server2的IP地址
DataDir=/var/lib/mysql-cluster
# 以下2个[MYSQLD]可以填写Server1和Server2的主机名。
# 但为了能够更快的更换集群中的服务器,推荐留空,否则更换服务器后必须对这个配置进行更改。
[MYSQLD]
[MYSQLD]

# 保存退出后,启动管理节点服务器Server3:

# ndb_mgmd -f /var/lib/mysql-cluster/config.ini

#启动管理节点后应该注意,这只是管理节点服务,并不是管理终端。因而你看不到任何#关于启动后的输出信息。

四、配置集群服务器并启动MySQL

# 在Server1和Server2中都需要进行如下改动:

# vi /etc/my.cnf

[mysqld]
ndbcluster
ndb-connectstring=192.168.0.3 #Server3的IP地址
[mysql_cluster]
ndb-connectstring=192.168.0.3 #Server3的IP地址

# 保存退出后,建立数据目录并启动MySQL:

# mkdir /var/lib/mysql-cluster
# cd /var/lib
# chown mysql:mysql mysql-cluster
# /usr/local/mysql/bin/ndbd --initial
# /etc/rc.d/init.d/mysqld start

可以把/usr/local/mysql/bin/ndbd加到/etc/rc.local中实现开机启动。

#注意:只有在第一次启动ndbd时或者对Server3的config.ini进行改动后才需要使#用--initial参数。平常就不需要使用--initial参数了。

五、检查工作状态

# 回到管理节点服务器Server3上,并启动管理终端:

# /usr/bin/ndb_mgm

# 键入show命令查看当前工作状态:(下面是一个状态输出示例)

[root@stu3 ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.1  (Version: 5.1.5, Nodegroup: 0, Master)
id=3    @192.168.0.2  (Version: 5.1.5, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.3  (Version: 5.1.5)

[mysqld(API)]   2 node(s)
id=4    @192.168.0.1  (Version: 5.1.5)
id=5    @192.168.0.2  (Version: 5.1.5)

ndb_mgm>


# 如果上面没有问题,现在开始测试MySQL:

#测试方法:在Server1中添加一个库,并导入一个数据库备份。然后去Server2上查 看效果。推荐使用一个大一点的数据库备份导入,这样你可以顺便查看MYSQL簇的工作效率。根据之前的测试,MYSQL的MASTER/SLAVER方式每秒可以录入2500条数据,现在你可以测试一下使用MYSQL簇每秒可以录入多少。

如果上述正常,则换到Server2上重复上面的测试,观察效果。

我说的就是上面的这个集群实验,可以做成功,但是就是同步不了数据库。
作者: xinyv    时间: 2008-01-09 13:27
没太明白,你做的东西,如果做成功以后你的server1 server2那天同时插入大量数据吗?
你的数据库的同步机制是啥??
作者: xpingtn    时间: 2008-01-09 14:18
我也不知道,mysql的集群是不是这样配???我在网上搜的技术文档都是这样这样,配好集群,插入大量的数据,数据就是会自动同步。看来网上的文档都不可信呀!!
呵呵~~~
现在看官方文档也看不太明白,郁闷呀!!!
作者: hmqq    时间: 2008-01-09 16:27
建的表用什么Engine?
作者: xpingtn    时间: 2008-01-09 16:34
手工建立的数据库和表
作者: Asyouwish    时间: 2008-01-10 10:44
六、创建数据库表

与没有使用 Cluster的MySQL相比,在MySQL Cluster内操作数据的方式没有太大的区别。执行这类操作时应记住两点:

表必须用ENGINE=NDB或ENGINE=NDBCLUSTER选项创建,或用ALTER TABLE选项更改,以使用NDB Cluster存储引擎在 Cluster内复制它们。如果使用mysqldump的输出从已有数据库导入表,可在文本编辑器中打开SQL脚本,并将该选项添加到任何表创建语句,或用这类选项之一替换任何已有的ENGINE(或TYPE)选项。
另外还请记住,每个NDB表必须有一个主键。如果在创建表时用户未定义主键,NDB Cluster存储引擎将自动生成隐含的主键。(注释:该隐含 键也将占用空间,就像任何其他的表索引一样。由于没有足够的内存来容纳这些自动创建的键,出现问题并不罕见)。
作者: 小小磊    时间: 2008-01-10 11:43
我也想知道原因
作者: xpingtn    时间: 2008-01-10 12:17
我也是刚学mysql的,问一下,这种表是怎么创建的,是在master上创建还是在管理节点上创建,能不能举个例子,谢谢!!!!
作者: xpingtn    时间: 2008-01-10 12:44
谢谢12楼的,我看了一下mysql的中文官方手册http://dev.mysql.com/doc/refman/ ... tml#ndb-mgm-process,在master上创建了一个表,slave上数据立刻同步了,在slave也插入一条数据,master也同步了。我在管理节点用ndb_mgm命令查看
[root@cluster ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.98  (Version: 5.1.5, Nodegroup: 0)
id=3    @192.168.0.99  (Version: 5.1.5, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.97  (Version: 5.1.5)

[mysqld(API)]   2 node(s)
id=4    @192.168.0.98  (Version: 5.1.5)
id=5    @192.168.0.99  (Version: 5.1.5)


这里怎么还有标识
id=3    @192.168.0.99  (Version: 5.1.5, Nodegroup: 0, Master)

当把两台都机器重启以后,默认是哪台服务器的mysql服务先起来,哪台机器就为master主机.
id=2    @192.168.0.98  (Version: 5.1.5, Nodegroup: 0, Master)

master主机的作用是什么???
作者: 75252    时间: 2008-01-10 17:08
我想问一下~这种mysql Cluster的原理是 应用发给master的语句执行同时也发给slave?还是!发给master后,slave到master取?
作者: raid_fifa    时间: 2008-01-10 18:08
在早期版本的MySQL Cluster中,创建数据库是不能在MySQL Server节点上自动同步的;要手动建好数据库后,其中的表才能自动同步。
这个问题在新版本的MySQL Cluster里面fix了。
现在最新的是5.1.22-rc,楼主换版本吧
作者: xpingtn    时间: 2008-01-10 23:11
看来得换个版本试试了.
呵~~~~~~~~~~
作者: 真空管    时间: 2008-02-10 16:53
建表的时候必须加上ENGINE=NDBCLUSTER这个语句才可以。
比如说:
CREATE TABLE City (
ID int(11) NOT NULL auto_increment,
Name char(35) NOT NULL default '',
CountryCode char(3) NOT NULL default '',
District char(20) NOT NULL default '',
Population int(11) NOT NULL default '0',
PRIMARY KEY  (ID)
) ENGINE=NDBCLUSTER;  《----注意这个

明白了吧?另外,别把咱们的内部文档帖到公共论坛,应该自己总结出一个自己的文档然后再发布。

[ 本帖最后由 真空管 于 2008-2-10 16:55 编辑 ]
作者: vrlinux.cn    时间: 2008-02-13 15:44
原帖由 xpingtn 于 2008-1-9 14:18 发表
我也不知道,mysql的集群是不是这样配???我在网上搜的技术文档都是这样这样,配好集群,插入大量的数据,数据就是会自动同步。看来网上的文档都不可信呀!!
呵呵~~~
现在看官方文档也看不太明白,郁闷呀!!!



呵呵,不是不可信,只是每个人的环境和操作步骤会有一些区别,所以也必定会存在一些问题.当你把这问题解决了,你也就学到东西了

估计建的表不是 NDBCLUSTER 引擎格式
作者: yingweixu    时间: 2008-02-19 13:56
请问:你采用这种方式的集群,是否知道master 与 slave 之间的同步是用master实时二进制日志作为同步的基础,也就是每次master都将日志传送给slave服务器,而服务器接受之后就将其反映在自己的数据库上,如果是以这种方式的话您需注意这几点:1.数据库在开始实施同步之前要保证其数据的一致性。2.slave数据库是否有权限去访问日志文件。3.开始同步时其二进制的文件名以及偏移量是否正确。
我没做过你这种集群,但是做了数据库同步的一点心得,不知道能否帮上你。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2