- 论坛徽章:
- 0
|
mysql master slave 实现
首先设置MySQL主服务器:
在主服务器上为从服务器建立一个用户:
grant replication slave on *.* to '用户名'@'主机' identified by '密码';
如果使用的是MySQL 4.0.2之前的版本,则用file权限来代替replication slave
编辑主服务器的配置文件:/etc/my.cnf
server-id=1
log-bin
binlog-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
binlog-ignore-db=不需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
注意:如果你想做一个复杂点的结构:比如说,A->B->C,其中B是A的从服务器,同时B又是C的主服务器,那么B服务器除了需要打开log-bin之外,还需要打开log-slave-updates选项,你可以再B上使用“show variables like 'log%';”来确认是否已经生效。
编辑从服务器的配置文件:/etc/my.cnf
server-id=2
master-host=主机
master-user=用户名
master-password=密码
master-port=端口
replicate-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
replicate-ignore-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
配置主从服务器的my.cnf时,留心各自的server-id一定要彼此独立,不能重复。
我们直接拷贝文件
在主服务器上查询当前二进制文件的文件名及偏移位置:
show master status;
然后停止主服务器上的MySQL服务:
mysqladmin -u root shutdown
再拷贝数据文件,这个随个人喜好了,我是直接
scp -r database_name user@192.168.1.2:/home/user
拷贝完可以启动master。
在slave上mv拷贝过去的数据目录到mysql的data目录下,别忘了修改目录属主和权限,再次启动slave的时候使用,记得启动时加上skip-slave-start选项,使之不会立刻去连接master,再在从服务器上设置相关的二进制日志信息:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
启动从服务器上的复制线程:
mysql> start slave;
验证主从设置是否已经成功,可以输入如下命令:
mysql> show slave status\G
会得到类似下面的列表:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果这两个选项不全是Yes,那就说明你前面某个步骤配置错了。
如果要实现两个主服务器,那就要配置一下自增ID,防止出现ID重复。
A服务器的my.cnf设置如下:
auto_increment_offset = 1
auto_increment_increment = 2
这样A的auto_increment字段产生的数值是:1, 3, 5, 7, ...
B服务器的my.cnf设置如下:
auto_increment_offset = 2
auto_increment_increment = 2
这样B的auto_increment字段产生的数值是:2, 4, 6, 8, ...
可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证
auto_increment_increment = N
再设置一下auto_increment_offset为适当的初始值就可以了。
|
|