欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL简单的Master-Slave搭建 博客分类: 数据库 MySQL 

程序员文章站 2024-02-12 14:23:16
...
我是照着《MySQL性能调优与架构设计》这本书上做的,过程中遇到些小问题,上网搜索了些资料,终于搭建成功:
一共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选项书上的说明是:
引用
为了让备份集具有一致性和完整性,我们必须确保dump数据的这个过程处于同一个事务中,或者锁住所有需要复制的表的写操作。如果所使用的是支持事务的存储引擎(如InnoDB),可以在执行mysqldump程序的时候通过添加--single-transaction选项,但是如果存储引擎并不支持事务,或者需要dump的表只有部分支持事务时,就只能先通过FLUSH TABLES WITH READ LOCK命令来暂停所有写入服务,然后再dump数据了。

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的时候报错:
引用
ERROR 2013(HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

搜索到这个链接:http://www.linuxsir.org/bbs/thread323110.html
zlowly 写道
那就应该是Tcpwarpper阻挡了,编辑/etc/hosts.allow,加上这两行
mysqld: 127.0.0.1
mysqld: 192.168.1.20

问题解决。

指定replicate某1个或n个数据库:

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

replicate时过滤指定的数据库:
set-variable=replicate-ignore-db=dbname
相关标签: MySQL