MySQL自带了一个强大的复制功能,可以实现数据库的同步复制。该功能通过主数据库(Master)上的二进制日志(binary log)来捕获并传递对数据库的更改,然后在从数据库(Slave)上重放这些更改,从而使得从数据库与主数据库保持同步。
下面是使用MySQL自带工具进行同步复制数据库的基本步骤:
- 配置主数据库(Master):
在主数据库服务器上进行以下配置: a. 确保MySQL配置文件(通常是my.cnf
或my.ini
)中启用了二进制日志功能:
[mysqld]
log-bin=mysql-bin
server-id=1
b. 重启MySQL服务,以使配置生效。
- 创建用于复制的用户:
在主数据库上创建一个用于复制的用户,该用户将用于从数据库连接到主数据库,并获取二进制日志。
CREATE USER 'replication_user'@'slave_ip' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_ip';
FLUSH PRIVILEGES;
用户权限如下
替换 'replication_user'
和 'password'
为你希望设置的用户名和密码。 'slave_ip'
是指从数据库服务器的IP地址或主机名。如果允许任意IP连接,可以将 'slave_ip'
设置为'%'
。
- 获取主数据库的当前二进制日志位置:
在主数据库上执行以下命令,以获取当前的二进制日志文件名和位置。记录下输出结果,稍后将在从数据库上使用。
SHOW MASTER STATUS;
- 配置从数据库(Slave):
在从数据库服务器上进行以下配置: a. 确保MySQL配置文件中启用了复制功能,并设置从数据库的唯一标识号(server-id):
[mysqld]
server-id=2
b. 重启MySQL服务,以使配置生效。
- 启动复制过程:
在从数据库上执行以下命令,启动复制过程并指向主数据库的位置。将<log_file>
和<log_position>
替换为步骤3中获得的主数据库的二进制日志文件名和位置。
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='<log_file>', MASTER_LOG_POS=<log_position>;
<log_file>
和 <log_position>
来自步骤3中主数据库的输出。
- 开始复制:
启动从数据库的复制进程:
START SLAVE;
- 检查复制状态:
执行以下命令检查从数据库的复制状态:
SHOW SLAVE STATUS;
确保在输出中看到 Slave_IO_Running
和 Slave_SQL_Running
均为 Yes
,这表示复制正在运行且没有错误。
现在,你的主数据库和从数据库应该已经配置为进行同步复制。主数据库上的更改会自动传递到从数据库,从数据库会按顺序重放这些更改,从而保持同步。注意,在复制过程中,主数据库和从数据库的数据会保持同步,但复制过程中可能会有一定的延迟。
注意:
expire_logs_days
是MySQL配置文件中的一个选项,用于指定保留二进制日志文件的天数。通过正确配置这个选项,你可以确保只保留最近3天的二进制日志,从而限制日志文件的大小并节省磁盘空间。
假设你希望保留最近3天的更改,可以按照以下步骤配置 expire_logs_days
:
- 打开MySQL配置文件(通常是
my.cnf
或my.ini
)。 - 在
[mysqld]
部分添加或编辑以下行:
[mysqld]
log-bin=mysql-bin
server-id=1
expire_logs_days=3
log-bin=mysql-bin
是启用二进制日志功能的配置。server-id=1
是设置主数据库的唯一标识号,确保主从服务器有不同的标识号。
expire_logs_days=3
是设置保留二进制日志的天数为3天。这意味着旧于3天的二进制日志文件将会自动被MySQL删除。
- 保存并关闭配置文件。
- 重启MySQL服务,以使配置生效。
配置完成后,MySQL将在每次生成新的二进制日志文件时记录当前日期,并自动删除早于3天的二进制日志文件。这样,你就可以确保保留最近3天的更改,并限制二进制日志文件的大小。请确保磁盘空间足够,以容纳至少3天的二进制日志文件。
如果提示SSL未开启 还需要自签署证书:
自签署证书是用于测试或开发目的的一种方式,它不受受信任的证书颁发机构(CA)签署。自签署证书在生产环境中不推荐使用,因为浏览器和客户端可能会警告用户不受信任的连接。
以下是使用OpenSSL工具生成自签署SSL证书的步骤:
- 安装OpenSSL:
首先,确保你的系统上安装了OpenSSL工具。在大多数Linux发行版中,OpenSSL通常已经预装。对于Windows系统,你可以从OpenSSL官方网站下载预编译的二进制文件。 - 生成私钥:
打开终端或命令行窗口,并执行以下命令生成私钥:
openssl genpkey -algorithm RSA -out private-key.pem
这将生成一个私钥文件 private-key.pem
,用于后续证书生成过程。
- 生成证书签名请求(CSR):
使用私钥生成证书签名请求(CSR)文件,其中包含你的域名和其他信息:
openssl req -new -key private-key.pem -out csr.pem
在这个过程中,你需要提供与证书相关的信息,如域名、组织名称、所在地等。填写这些信息时,请确保与你的实际需求一致。
- 自签署证书:
使用CSR文件和私钥生成自签署证书:
openssl x509 -req -days 365 -in csr.pem -signkey private-key.pem -out certificate.pem
在这个命令中,我们指定证书有效期为365天,你可以根据需要调整有效期时间。
- 完成:
现在你已经生成了自签署的SSL证书文件certificate.pem
和私钥文件private-key.pem
。你可以将这两个文件用于测试环境中的SSL配置。
在生成自签署证书时,请确保提供的信息准确,并且仅在测试环境中使用。对于生产环境,建议购买由受信任的证书颁发机构(CA)签署的商业SSL证书,以确保加密连接的安全和受信任。
输入上面的命令后证书已经位于你的文件夹内
假如你的证书位于/root
[mysqld]
ssl-ca=/root/certificate.pem
ssl-cert=/root/certificate.pem
ssl-key=/root/private-key.pem
全完成后
你可以(尽量不要用phpmyadmin,它会给你出很多莫名奇妙的错误)
mysql -h hostname -u username -p
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.XXXXX',
MASTER_LOG_POS=1863XXX;
查看主从状态代码
SHOW SLAVE STATUS;
如果你的主服务器损坏启用从服务器
是的,如果在主从复制设置中主服务器(Master)损坏,你可以临时将从服务器(Slave)提升为新的主服务器,从而继续保持应用程序的可用性。这个过程被称为”切换”或”故障切换”。
在进行主从切换时,你需要采取一些步骤来确保数据的一致性,并使从服务器成为新的主服务器。以下是一般情况下进行主从切换的步骤:
- 停止主从复制:
在进行主从切换之前,首先需要停止从服务器上的复制进程。 在从服务器上执行以下命令停止复制:
STOP SLAVE;
- 检查从服务器状态:
确保从服务器的复制状态已经停止,可以通过以下命令检查:
SHOW SLAVE STATUS;
确保在输出中的 Slave_IO_Running
和 Slave_SQL_Running
均为 No
,表示复制已停止。
- 更新应用程序配置:
由于主从切换后,应用程序需要连接到新的主服务器(之前的从服务器),因此你需要更新应用程序的数据库配置,将连接信息指向新的主服务器。 - 将从服务器提升为新的主服务器:
在进行主从切换时,你需要确保新的主服务器与之前的主服务器具有相同或最新的数据。 a. 在从服务器上执行以下命令,断开与主服务器的连接:
RESET SLAVE;
b. 在从服务器上执行以下命令,将其成为新的主服务器:
RESET MASTER;
c. 现在从服务器已经成为一个独立的数据库服务器,可以提供新的主服务器角色。
- 更新其他从服务器配置:
如果有其他从服务器与之前的主服务器建立了连接,你需要更新这些从服务器的配置,使其连接到新的主服务器。 - 修复原主服务器(可选):
如果原主服务器的损坏是临时性的,你可以在修复后将其重新配置为从服务器,并与新的主服务器建立复制连接。这将恢复原有的主从复制架构。
请注意,主从切换是一个复杂的过程,需要谨慎执行,并确保在进行切换前做好充分的备份。在进行主从切换之前,最好先了解你的数据库架构和应用程序的要求,以及进行测试和演练,以确保切换过程能够成功并且不影响数据完整性和应用程序的可用性。
总结下其实常用到的口令并不多
输入同步用户信息:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='<log_file>', MASTER_LOG_POS=<log_position>;
停止从服务
STOP SLAVE;
开始从服务
START SLAVE;
显示从服务状态
SHOW SLAVE STATUS;
显示主服务状态(在主服务器上用)
SHOW MASTER STATUS;
SHOW SLAVE STATUS\G;
检查下面红框位置是否是Yes 只有这个状态才能同步
点击数:31