mysql-Replication(主从复制)

知识点:

mysql Replication (主从复制)

  1. 复制时异步的,从站从不需要永久连接以接收来自主站的更新;

  1. 作为主服务器角色的数据库服务器必须开启二进制日志;

  1. 除非另行指定,否则主从二进制日志中的所有事件都在从站上执行;且无法将主服务器配置为仅记录特定事件;

  1. 由于每个从服务器都分别记录了自己当前处理二进制日志中的位置,因此可以断开从服务器的连接,重新连接然后恢复继续处理

Replication配置:

第一步配置:

主服务器配置:

在主服务器上,您必须启用二进制日志记录并配置唯一的服务器ID。需要重启服务器。

vim /etc/my.cnf
#添加
[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1  
#如果省略server-id(或将其显式设置为默认值0),则主服务器拒绝来自从服务器的任何连接。
systemctl restart mysqld

在此配置文件中指定了日志文件的位置,日志文件会自动生成,但是目录不会,请确保路径目录存在

创建日志目录并赋予权限:

mkdir /var/log/mysql
chown -R mysql.mysql /var/log/mysql

【非必要】为了在使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性,在master上配置:

vim /etc/my.cnf
#添加
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1

注意:

确保未在复制主服务器上启用skip-networking选项。

如果已禁用网络,则从站无法与主站通信,并且复制失败。

在master上创建一个专门用以复制用户数据的用户

grant replication slave on *.*  TO  '用户名'@'%'  identified by  '密码';
flush privileges;   #刷新权限

在从服务器上测试:mysql -h 服务器ip -u用户名-p密码

第二步配置:
情况一:master有数据

如果主数据库包含现有数据,则必须在主服务器将此数据复制到每个从站

#这里的用户是主服务器的用户 
mysqldump  -u用户名  -p密码  --all-databases  --master-data=1 > 111.sql

参数详解:
--all-databases表示备份所有的数据库,如果只需要备份指定的数据库,可以将该参数替换为数据库名。
--master-data=1表示添加二进制日志文件名和位置到备份文件中,以便在执行备份文件时使用正确的二进制日志文件,保证备份的一致性。
> 111.sql表示将备份数据输出到名为111.sql的文件中。可以是sql文件也可以是db文件;
该命令的作用是备份MySQL中所有的数据库,并将备份数据输出到名为111.sql的文件中



scp  111.sql root@mysql-slave1:/root/     把备份文件传到从服务器
#mysql-slave1:从服务器ip

在从服务器配置,并重启mysql:

// my.cnf 文件
[mysqld]
server-id=2
systemctl restart mysqld

导入数据到从服务器上

mysql>  source  /root/111.sql

在从服务器上配置连接到主服务器的相关信息

mysql> change master to
    -> master_host='服务器名或ip',
    -> master_user='用户名',
    -> master_password='密码';

在从服务器启动复制线程

mysql> start slave;  #启动
mysql> show slave status\G   #查看

#结果是
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
情况二:master没有数据

在主服务器查看主服务器的二进制日志的名称

flush tables with read lock;   #刷新所有表和阻止写语句
show master status \G

在从服务器配置

mysql> change master to
    -> master_host='服务器名或ip',
    -> master_user='用户名',
    -> master_password='密码',
    -> master_log_file='mysqld-bin.000015',
    -> master_log_pos=0;

mysql> start slave;   #启动服务器的复制线程
mysql> show binlog events\G   #看到第一个binlog文件的内容
整体内容概括:
  1. 在两个服务器配置server-id,以确定哪个服务器是主服务器,哪服务器是从服务器

  1. 在主服务器配置生成日志文件的路径,确保日志文件的路径目录要存在;

  1. 给日志文件目录授权;

  1. 给在主服务器给从服务器的用户授权,授权后刷新权限;

  1. 若主服务器有数据需要备份到从服务器,则把主服务器的数据导出,并复制到从服务器,在从服务器的数据库把内容导入;

  1. 若主服务器没有数据需要备份到从服务器,则刷新所有表和阻止写语句;查看二进制日志名称;

  1. 在从服务器链接主服务器,启动线程即可;

如果线程启动失败,停止线程,清空线程,解决问题,在启动线程;

start slave;  #开始复制线程
stop slave;  #停止复制线程
reset slave;#清空复制线程

在从服务器暂停复制:
  1. 停止从服务器处理二进制日志

stop slave;  #停止复制线程
  1. 从I / O线程停止从主二进制日志读取事件并将它们写入中继日志,并且SQL线程停止从中继日志读取事件并执行它们。您可以通过指定线程类型单独暂停I / O或SQL线程:

stop slave IO_thread;
stop slave sql_thread;
  1. 要再次开始执行,:

START SLAVE;
  1. 若要启动特定线程:

START SLAVE IO_THREAD;
START SLAVE SQL_THREAD;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值