MySQL主从复制集群配置

5 篇文章 0 订阅

在上节Mysql安装配置教程,已经讲解了单机如何配置MySQL的方法了,现在我们准备两台机器,分别是192.168.126.129和192.168.126.130,并且两台机器都已经安装好了MySQL,其中192.168.126.129作为主节点192.168.126.130作为从节点。

1、配置主节点

为主节点创建用户,创建用户的方法可以参看创建用户并授予权限,创建用户repl,并且作为同步数据的用户

(1)修改主节点下mysql的配置  vim /etc/my.cnf

#进入mysql 的配置文件
vim /etc/my.cnf

[mysql]
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.socket

[client]
port=3306
socket=/var/lib/mysql/mysql.socket

[mysqld]
port=3306
server-id=1     将server-id改为1
user=mysql
general_log=1
general_log_file=/var/log/mysql/mysql.log   
socket=/var/lib/mysql/mysql.socket
basedir=/usr/soft/mysql8.0.20
datadir=/usr/soft/mysql8.0.20/data

log-bin=/usr/soft/mysql8.0.20/data/mysql-bin  #开启mysql binlog功能
binlog_format=ROW                             #binlog记录内容的方式,记录被操作的每一行
binlog_row_image=minimal                      #减少记录日志的内容,只记录受影响的列
binlog-do-db= test                            #指定需要复制的数据库名为test,主库从库必须一样


innodb_data_home_dir=/usr/soft/mysql8.0.20/data
innodb_log_group_home_dir=/usr/soft/mysql8.0.20/data/
character-set-server=utf8mb4
lower_case_table_names=1
autocommit=1
symbolic-links=0
default_authentication_plugin=mysql_native_password

[mysqld_safe]
log-error=/usr/soft/mysql8.0.20/data/mysql.log
pid-file=/usr/soft/mysql8.0.20/data/mysql.pid
~

# 服务的唯一编号

server-id= 1

# 开启mysql binlog功能

log-bin= mysql-bin

# binlog记录内容的方式,记录被操作的每一行

binlog_format= ROW

# 减少记录日志的内容,只记录受影响的列

binlog_row_image= minimal

# 指定需要复制的数据库名为test,主库从库必须一样

binlog-do-db= test

# 忽略的数据库

binlog-ignore-db= mysql

binlog-ignore-db= information_shema

修改好配置文件,重启mysql服务

servicemysql restart

(2)创建从库同步数据的账号

登录mysql客户端:

mysql -u root –p

然后添加一个用户【用于在从库主机中登录进行同步】:

create user 'repl'@'%' identified by 'replicate';

再对该用户授予复制权限:

grant replication slave on *.* to 'repl'@'%';

使执行生效:

flush privileges;

(3)查看一下主库的状态

show master status\G

注:我在执行的时候,show master status\G后面加;会报No query specified的错误,后来我把;去掉,不再出现错误。

去掉;符号以后 

file:表示同步的bin-log信息从哪个文件开始;

position:表示从file的哪个位置开始;

binlog_do_db:表示同步哪一个库

在后面的slave配置中,这三个结果都需要使用到。

这样,主节点配置完成,接下来配置从节点

2、配置从节点

[mysql]
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.socket

[client]
port=3306
socket=/var/lib/mysql/mysql.socket

[mysqld]
port=3306
server-id=2
user=mysql
general_log=1
general_log_file=/var/log/mysql/mysql.log    #如果系统中不存在需要自己创建
socket=/var/lib/mysql/mysql.socket
basedir=/usr/soft/mysql8.0.20
datadir=/usr/soft/mysql8.0.20/data

relay-log=/usr/soft/mysql8.0.20/data/relay-bin
relay-log-index=/usr/soft/mysql8.0.20/data/relay-bin.index

log-bin=/usr/soft/mysql8.0.20/data/mysql-bin                  # 开启mysql binlog功能
binlog_format=ROW                                             # binlog记录内容的方式,记录被操作的每一行
binlog_row_image=minimal                                      # 减少记录日志的内容,只记录受影响的列
replicate-do-db=test

innodb_data_home_dir=/usr/soft/mysql8.0.20/data
innodb_log_group_home_dir=/usr/soft/mysql8.0.20/data/
character-set-server=utf8mb4
lower_case_table_names=1
autocommit=1
symbolic-links=0
default_authentication_plugin=mysql_native_password
[mysqld_safe]
log-error=/usr/soft/mysql8.0.20/data/mysql.log
pid-file=/usr/soft/mysql8.0.20/data/mysql.pid

#启用中继日志

relay-log=/usr/soft/mysql8.0.20/data/relay-bin

# 服务的唯一编号

server-id= 2

# 开启mysql binlog功能

log-bin= mysql-bin

# binlog记录内容的方式,记录被操作的每一行

binlog_format= ROW

# 减少记录日志的内容,只记录受影响的列

binlog_row_image= minimal

# 指定需要复制的数据库名为test

replicate-do-db= test

(2)修改好配置文件,重启mysql服务

servicemysql restart

(3)执行同步命令

给从设置主服务器ip,同步账号密码,同步位置

mysql的终端执行:

然后加上以下配置
relay-log=/usr/soft/mysql8.0.20/data/relay-bin
relay-log-index=/usr/soft/mysql8.0.20/data/relay-bin.index 

3、关联主节点

执行命令:

change master to master_host='192.168.126.129',master_port=3306,master_user='repl',master_password='replicate',master_log_file='mysql-bin.000013',master_log_pos=368;

命令需要特别注意:master_log_file 和master_log_pos 2个属性内容,这2个属性是刚才主服务器上执行show master status\G;查询出来的内容

4、启动从节点

start slave;

 

5、查看状态

show slave status\G

 当:Slave_IO_Running和Slave_SQL_Running的状态都为Yes时,说明从库配置成功

然后,测试下在主节点的test库中创建表、添加数据等操作,然后查看是否会同步到从节点

6、扩展

问题1:上述介绍的是备份某个库的操作,如果需要备份多个库则直接在master的my.cnf中添加新的一行binlog-do-db=test_2等等即可。这行代码的意思是指:同步该库(test_2)的bin-log信息。

问题2:这种直接修改master节点的my.cnf文件去同步某个库,需要重启master才能让整个mysql集群工作,有没有一种方法可以搭建备库,但是不需要重启master?

显然是可以的,不过这次备份的库是master的全部库了(因为没有指定具体库的bin-log), 所以默认就把全部的bin-log都同步了。可以参考如下的步骤:

step 1:导出Master节点中所有的数据库

mysqldump -uroot -A --routines --single-transaction --master-data=2 > /data1/mysqldump/alldatabases.sql

参数注释:

-A:导出所有库的数据

--routines Dump stored routines (procedures and functions) from dumped databases

--single-transaction Issue a BEGIN SQL statement before dumping data from server

--master-data Write the binary log file name and position to the output

这里添加option:--master-data之后,就可以不再使用show master status\G;去查看bin-log的file和position了。

step 2:

将上述的sql文件导入到备库中。

step 3:

其余步骤同上述内容【在master上创建一个用户,并授权,然后刷新】;在slave上执行change操作。

如果搭建好主从复制,想要停止从复制的功能可以使用语句:

stop slave;

如何重新配置主从:

stop slave;

reset master; 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值