MySQL简单的Master-Slave搭建

我是照着[url="http://book.douban.com/subject/3729677/"]《MySQL性能调优与架构设计》[/url]这本书上做的,过程中遇到些小问题,上网搜索了些资料,终于搭建成功:
一共4个步骤:
1、做好master端的准备工作:
首先开启master的log-bin,在my.cnf中配置:log-bin=path for binary log
等号以及后面的路径是可选的,默认路径为mysql的数据路径,即datadir,datadir可以在my.cnf中找到。
接着需要创建一个用于复制的mysql账号:
CREATE USER 'repl'@'ip of slave' IDENTIFIED BY 'password for slave';

然后把REPLICATION SLAVE的权限赋给该账号:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'ip of slave';

对了,还要在my.cnf中指定一下server-id,我的笔记本archlinux(作为master)中的my.cnf默认有了个server-id=1。而另一台台式机(作为slave)ubuntu中的server-id为空,我给了它一个值2。
2、获取master的快照:
我是通过mysqldump的方式导出数据的:
mysqldump --master-data -u root -p database_name table_name > snapshot.sql

如果要导出整个数据库,可以不指定table_name。
这里有个--single-transaction选项书上的说明是:
[quote]为了让备份集具有一致性和完整性,我们必须确保dump数据的这个过程处于同一个事务中,或者锁住所有需要复制的表的写操作。如果所使用的是支持事务的存储引擎(如InnoDB),可以在执行mysqldump程序的时候通过添加--single-transaction选项,但是如果存储引擎并不支持事务,或者需要dump的表只有部分支持事务时,就只能先通过FLUSH TABLES WITH READ LOCK命令来暂停所有写入服务,然后再dump数据了。[/quote]
3、slave端恢复快照:
先把刚才的snapshot.sql复制到slave端,然后把该文件中的CHANGE MASTER TO那一行注释掉(别删除掉,该信息还有用),保存后执行:
mysql -u root -p -Ddatabase_name < snapshot.sql
即可。
4、配置并启动slave:
CHANGE MASTER TO MASTER_HOST='master ip',MASTER_USER='repl',MASTER_PASSWORD='password',MASTER_LOG_FILE='xxx-bin.xxx',MASTER_LOG_POS=xxx;

这里的LOG_FILE和LOG_POS信息就在刚才注释掉的那一行代码中。另外还有一种办法可以查询LOG_FILE和LOG_POS:在master的mysql console中执行show master status;

启动:
start slave;


如果想让多台slave用同一个账号和密码连接到master,可以在创建replication账号时把具体的ip换成百分号(%)。

我第一次在连接master的时候发现连接不上,数据并没有同步过来,直接使用mysql -u repl -p -h master_ip来连接master的时候报错:
[quote]ERROR 2013(HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0[/quote]
搜索到这个链接:[url]http://www.linuxsir.org/bbs/thread323110.html[/url]
[quote="zlowly"]那就应该是Tcpwarpper阻挡了,编辑/etc/hosts.allow,加上这两行
mysqld: 127.0.0.1
mysqld: 192.168.1.20[/quote]
问题解决。

[b]指定replicate某1个或n个数据库:[/b]

在slave端my.cnf文件的[mysqld]中加上:
set-variable=replicate-do-db=dbname1
set-variable=replicate-do-db=dbname2

[b]replicate时过滤指定的数据库:[/b]
set-variable=replicate-ignore-db=dbname
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值