您好,欢迎访问一九零五行业门户网

MySQL主从服务器链式复制配置(ubuntu)_MySQL

ubuntu
bitscn.com mysql主从服务器链式复制配置(ubuntu)
服务器结构:
a、b、c三台服务器; 其中a为新闻数据源,a为b的master,b为a的slave,同时也是c的master;
b服务器从a复制部分数据,c备份a的所有数据;
配置:
master a的配置
sudo vi /etc/mysql/my.cnf
删除以下参数前的注释并修改
server-id       = 1 //分配server-id
log-bin         = master-bin //默认mysql-bin,可以不修改
log-bin-index   = master-bin.index  //非必须
bind-adress     = 0.0.0.0 //默认127.0.0.1 不修改可能导致无法访问
修改系统防火墙使b服务器可以访问3306端口,(详查ufw命令)  
重启mysql:
sudo /init.d/mysql restart
通过语句:
grant replication slave,replication client on *.* to user@'ip b' identified by 'password';
给b服务器建立一个可以连接到a的帐号
进入mysql,通过:
show master status;
查看a的状态,记录下file的位置和postion的参数
slave b的配置
sudo vi /etc/mysql/my.cnf
server-id       = 2
log-bin         = slave-bin
bind-address    = 0.0.0.0
relay-log-index =  slave-relay-bin.index //非必须
relay-log       = slave-relay-bin   //非必须
添加参数:
log-slave-updates = 1   
//通常情况,从服务器从主服务器接收到的更新不记入它的二进制日志。
//该选项告诉从服务器将其sql线程执行的更新记入到从服务器自己的二进制日志。
replicate_wild_do_table = copy_db.copy_table //表示需要复制的库中的表,可以善用%
replicate_wild_ignore_table = ignore_db.ignore_table //不复制的表
至于为什么不使用replicate_do_db和replicate_ignore_db参数,
是为了方式跨库更新时出错,如果能确保不会跨库更新可考虑
重启mysql,进入本机mysql
执行以下语句:
change master to master_host='server a ip',
master_port=3306,
master_user='user',
master_password='password',
master_log_file='mysql-bin.000001',
master_log_pos=0;
//master_log_file和master_log_pos对应a中的file位置和postion参数,表示开始复制的bin文件和位置
start slave;    //启动slave
show slave status;  //查看slave_io_state参数,如果是waiting for master to send event,则正常
//正常状态下slave_io_running与slave_sql_running均为yes
//如不能正常链接,根据slave_io_state,slave_io_running,slave_sql_running,last_io_error
//等参数查找失败原因
通过:
show master status;
命令记录file位置和postion参数;
给c服务器分配一个帐号用于同步;
方法参照a,防火墙设置参照a;
slave c的配置
sudo vi /etc/mysql/my.cnf
server-id  = 3
relay-log-index =  slave-relay-bin.index //非必须
relay-log       = slave-relay-bin   //非必须
通过change master to语句来修改master的参数,参照b的配置;
通过
show slave status;
检查c的状态,参照b
bitscn.com
其它类似信息

推荐信息