mysql主从复制

数据库 171      收藏
mysql主从复制

mysql主从复制

MySQL主从复制是一种MySQL数据库的复制方式,可以将一个MySQL数据库的数据复制到另一个MySQL数据库上。主库是数据源,而从库是数据目的地。当主库上的数据发生变化时,从库将自动更新。

主从复制好处

    提高数据库的可用性和可靠性,因为从库可以作为主库的备份,当主库出现故障时,可以快速切换到从库。

    分担主库的读写压力,从库可以用于读取操作,减轻主库的负载。

    提高数据库的性能,因为可以将从库部署在不同的地理位置,使用户更接近数据源。

    将备份目标从主库转换成从库,可以解决在备份数据库时读写速度急剧减慢的问题

要求

1. 主库和从库需要能够相互访问,确保主库和从库之间的网络连接是可靠的,并且带宽足够大。

2. 主库和从库需要具备足够的硬件资源,包括 CPU、内存、磁盘等。确保服务器能够承受预期的负载,并且有足够的空间来存储数据。

3. 主库和从库需要运行相同版本的 MySQL,以确保兼容性。此外,还需要确保 MySQL 配置文件的设置相同,包括字符集、缓存大小等。

4. 在主从复制中,主库上的所有数据变更都会被同步到从库上。因此,在进行主从复制之前,需要确保主库和从库之间的数据库结构和数据是一致的。可以通过备份和还原数据来达到这个目的。

5. 在配置主从复制和读写分离后,需要定期监控系统性能和状态。可以使用 MySQL 相关的工具来监控数据库的运行状态,并及时处理异常情况。此外,还需要进行定期备份和数据恢复测试,以确保数据安全和可靠性。

6. 确认防火墙已经开放必要的端口。在 MySQL 主从配置中,需要开放的端口通常是 3306 端口(MySQL 服务端口)和 33061 端口(MySQL 服务端口的远程管理端口)。确保这些端口已经在防火墙上开放。如果使用的是云服务器,需要检查云服务商的安全组规则是否正确设置。例如,如果使用亚马逊 AWS,需要在安全组规则中添加允许来自其他服务器的 MySQL 流量的规则。如果使用的是 Linux 操作系统,则需要确认 iptables 防火墙是否已经配置正确。在 iptables 中需要开放的端口通常是 3306 端口和 33061 端口。如果使用的是 Windows 操作系统,则需要确认 Windows 防火墙是否已经配置正确。在 Windows 防火墙中需要开放的端口通常是 3306 端口和 33061 端口。

步骤

1. 主库配置

1). 在 my.cnf 文件中添加以下配置项:

[mysqld]

log-bin=mysql-bin #mysql是你的bin文件名,可随意做修改

改完之后重启mysql服务即可

2) 验证二进制日志是否已经启用,如果该命令可以正常执行并显示二进制日志文件列表,则说明二进制日志已经启用。

SHOW BINARY LOGS;

3)修改server-id, 配置项指定了主库的唯一标识符,从库需要用到该标识符进行连接。注意,改完后执行mysql重启服务

在 my.cnf 文件中添加以下配置项:

[mysqld]

server-id=1

4) 在主库上创建用于复制的账户

CREATE USER 'yourusername'@'主库的ip地址' IDENTIFIED BY 'password';

GRANT REPLICATION SLAVE ON *.* TO 'yourusername'@'主库的ip地址';

5) FLUSH PRIVILEGES;#执行这行刷新权限


2. 从库配置

1)打开my.cnf/ini文件,添加以下配置:

[mysqld]

server-id=2

server-id 配置项指定了从库的唯一标识符,与主库的 server-id 配置项不同。

2)在从库上启动复制进程

CHANGE MASTER TO

  MASTER_HOST='主机ip',

  MASTER_USER='创建的用户名',

  MASTER_PASSWORD='password',

  MASTER_LOG_FILE='mysql-bin.000001',#在主库使用 SHOW MASTER STATUS;查询File字段使用

  MASTER_LOG_POS=12345;#在主库使用 SHOW MASTER STATUS;查询Position字段使用

3) 重启mysql服务

4) 查看状态

SHOW SLAVE STATUS \G;#在mysql中使用该查询命令查看

如果读到以下信息,即为成功

...

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 107

Slave_IO_Running:YES

Slave_SQL_Running:YES

...

如果Slave_IO_Running,Slave_SQL_Running都是no,请查看第二步是否在MASTER_LOG_FILE/MASTER_LOG_POS有误


结束语

数据库备份可直接备份从库,从而不影响主库,从库其实就相当于备份了主库了!