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

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

程序员文章站 2022-06-04 16:10:32
...
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