Linux云计算 |【第四阶段】RDBMS2-DAY1

主要内容:

MySQL主从同步(概述、原理、构建主从同步)、主从同步结构类型(主多从、主从从、主主)、复制模式(异步、半同步)、启用半同步复制

一、MySQL主从同步

MySQL 主从同步(Master-Slave Replication)是一种常见的数据库复制技术,用于提高数据库的可用性、扩展性和数据安全性。通过主从同步,可以将一个 MySQL 数据库(主库)的数据复制到一个或多个 MySQL 数据库(从库),从而实现数据的冗余备份和读写分离。

1、主从同步概述

1)实现同步的服务结构

  • ① 主服务器(主库):接收从服务器访问连接;
  • ② 从服务器(从库):自动同步主服务器数据;

2)主从同步的工作原理

主库(Master)

  • 主库是数据的源头,负责处理所有的写操作(INSERT、UPDATE、DELETE)。
  • 主库将所有的写操作记录在二进制日志(Binary Log)中。

从库(Slave)

  • 从库是主库的副本,负责处理读操作(SELECT)。
  • 从库通过读取主库的二进制日志,将主库的写操作应用到自身,从而保持与主库的数据一致性。

二进制日志(Binary Log)

  • 二进制日志记录了主库的所有写操作,包括事务的开始和结束。
  • 从库通过连接到主库,读取并应用这些二进制日志,实现数据的同步。

3)主从同步的配置步骤

① 配置主库(Master)

  • 启用二进制日志:在主库的配置文件(通常是 my.cnf 或 my.ini)中,添加以下配置:
[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
server-id = 1
binlog_do_db = your_database_name

log_bin:指定二进制日志文件的路径和名称。

server-id:指定主库的唯一标识符。

binlog_do_db:指定需要同步的数据库名称(可选)。

  • 重启 MySQL 服务:重启 MySQL 服务以应用配置更改:
sudo systemctl restart mysql
  • 创建用于复制的用户:在主库上创建一个用于复制的用户,并授予复制权限:
CREATE USER 'repl_user'@'slave_ip' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'slave_ip';
FLUSH PRIVILEGES;
  • 获取主库的二进制日志位置:在主库上执行以下命令,获取当前的二进制日志文件和位置:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

记录 File 和 Position 的值,这些值将用于从库的配置。

② 配置从库(Slave)

  • 配置从库:在从库的配置文件中,添加以下配置:
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_database_name

server-id:指定从库的唯一标识符。

relay_log:指定中继日志文件的路径和名称。

log_bin:指定二进制日志文件的路径和名称(可选)。

binlog_do_db:指定需要同步的数据库名称(可选)。

  • 重启 MySQL 服务:重启 MySQL 服务以应用配置更改:
sudo systemctl restart mysql
  • 配置从库连接主库:在从库上执行以下命令,配置从库连接到主库:
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=12345;

MASTER_HOST:主库的 IP 地址或主机名。

MASTER_USER:用于复制的用户名。

MASTER_PASSWORD:用于复制的用户密码。

MASTER_LOG_FILE:主库的二进制日志文件名。

MASTER_LOG_POS:主库的二进制日志位置。

  • 启动从库复制:在从库上执行以下命令,启动复制进程:
START SLAVE;
  • 检查从库状态:在从库上执行以下命令,检查复制状态:
SHOW SLAVE STATUS\G

检查 Slave_IO_Running 和 Slave_SQL_Running 是否为 Yes,表示复制正常运行。

2、主从同步的优点

提高可用性:通过数据冗余,提高数据库的可用性,减少单点故障的风险

读写分离:将读操作分配到从库,减轻主库的负载,提高系统性能

数据备份:从库可以作为主库的备份,提供数据的安全性和可靠性

扩展性:通过增加从库,可以扩展系统的读能力,支持更多的并发读操作

3、主从同步的缺点

延迟问题:从库的数据同步可能存在延迟,特别是在主库写操作频繁的情况下

单点写入:主库仍然是单点写入,如果主库故障,需要手动切换到从库

配置复杂:主从同步的配置和管理相对复杂,需要仔细规划和维护


构建主从同步示例:

实验拓扑结构:

  • 服务器角色:node10为主(Master),node11为从(Slave);
  • node10配置:ip地址为192.168.2.10,安装mysql,初始化密码为[email protected]
  • node11配置:ip地址为192.168.2.11,安装mysql,初始化密码为[email protected]

提示:防火墙与SELinux提前关闭;

步骤1:准备初始化环境(node10、node11操作)

① 准备MySQL数据库,并初始化密码(以node10为例)

[root@node10 ~]# yum -y install mysql-community-*   //检查Yum源,并安装MySQL
[root@node10 ~]# systemctl start mysqld     //启动服务
[root@node10 ~]# systemctl enable mysqld    //设置开机自启
[root@node10 ~]# grep -i password /var/log/mysqld.log    //查看生成的随机密码
2021-06-10T13:44:26.945514Z 1 [Note] A temporary password is generated for root@localhost: O-,Ya=5qpkpW
[root@node10 ~]# mysqladmin -uroot -p' O-,Ya=5qpkpW ' password '[email protected]'

② 导入sql数据(仅node10操作)

参考:# git clone https://gitee.com/mrzhangzhg/tedu_nsd.git

[root@localhost ~]# scp -r /var/lib/mygit/tedu_nsd/dbs/mysql_scripts/ 192.168.2.10:/root
[root@node10 ~]# ls
anaconda-ks.cfg  mysql_scripts
[root@node10 ~]# mysql -uroot [email protected] < mysql_scripts/nsd2021_data.sql
[root@node10 ~]# mysql -uroot [email protected] -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nsd2021            |
| performance_schema |
| sys                |
+--------------------+

 

步骤2:配置主服务器(node10操作)

① 修改配置文件,并重启服务

[root@node10 ~]# vim /etc/my.cnf
[mysqld]
server_id = 10         //服务器身份标识
log_bin = master10    //启用binlog日志
...
[root@node10 ~]# systemctl restart mysqld   //重启服务

② 查看生成的binlog日志文件

[root@node10 ~]# ls /var/lib/mysql/master10.*
/var/lib/mysql/master10.000001  /var/lib/mysql/master10.index
[root@node10 ~]# mysql -uroot [email protected]
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master10.000001 |      154 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

③ 授权Slave从服务器,可通过repluser用户同步数据

mysql> grant replication slave on *.* to repluser@'%' identified by '[email protected]';
mysql> show grants for repluser@'%';
+--------------------------------------------------+
| Grants for repluser@%                            |
+--------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%' |
+--------------------------------------------------+
1 row in set (0.00 sec)

步骤3:配置从服务器(node11操作)

① 修改配置文件,并重启服务

[root@node11 ~]# vim /etc/my.cnf
[mysqld]
server_id = 11    //服务器身份标识
...
[root@node11 ~]# systemctl restart mysqld

② 通过mysqldump手动同步主服务数据库数据

注意:从服务器与主服务器进行自动同步前提,需保证之前已有的数据库数据一致;

# 主服务器备份数据,并拷贝备份文件到从服务器

[root@node10 ~]# mysqldump -uroot [email protected] --master-data nsd2021 > /root/fullbackup.sql
[root@node10 ~]# scp /root/fullbackup.sql [email protected]:/root

# 从服务器恢复数据

[root@node11 ~]# mysql -uroot [email protected]
mysql> create database nsd2021 default charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
[root@node11 ~]# mysql -uroot [email protected] nsd2021 < /root/fullbackup.sql

【--master-data】作用:如果完全备份完成后,又有新的数据产生,它可记录备份时的数据状态信息。

步骤4:配置从服务器与主服务器同步

① 在同步的备份文件中,查看binlog日志名(master_log_fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值