CentOS7 - 配置MySQL复制
此配方教您如何配置MySQL的主从复制,以近乎实时地维护数据库的镜像副本。
为了复制数据,主MySQL服务器将有关发生的任何更改(插入,更新等)的详细信息记
Configuring MySQL replication 此配方教您如何配置MySQL的主从复制,以近乎实时地维护数据库的镜像副本。 为了复制数据,主MySQL服务器将有关发生的任何更改(插入,更新等)的详细信息记录到称为二进制日志的文件中。每个从属服务器都连接到主系统,从日志文件中读取信息,然后复制更改以维护自己的数据库本地副本。每个从服务器都对自己负责,这意味着我们可以在不影响主服务器可用性的情况下关闭服务器进行维护。一旦它重新上线,从机就会从它停止的地方恢复复制。 复制在许多情况下都很有用。例如,如果在从站上维护数据库的完整副本,则可以轻松地更换主服务器以实现故障转移或灾难恢复。对于需要考虑可扩展性和性能的环境,主机可以执行写操作,而负载均衡器后面的只读从机集合可以处理密集的读操作。 准备 此配方演示了如何使用两个系统配置MySQL复制。 第一个系统是主MySQL服务器,我们假设它具有IP地址192.168.56.100。 第二个系统是从属服务器,地址为192.168.56.101。 您需要在两个系统上使用root帐户或sudo来完成配置的管理访问权限。 两个系统都应安装MySQL,如前面的设置MySQL数据库配方所述。 如果在主服务器上创建了一个或多个数据库后设置复制,请按照备份和还原MySQL数据库配方进行备份,然后在配置复制之前将其导入从服务器。 这可确保复制从所有同步数据库开始。 怎么做。。。 请按照以下步骤为MySQL配置主从复制: vi /etc/my.cnf 在[mysqld]部分中,为server-id选项添加一个新条目,并将其值设置为1: server-id = 1 log_bin 重新启动服务器以使更改生效: systemctl restart mysqld.service CREATE USER "slave"@"192.168.56.101" IDENTIFIED BY "S3CR3t##"; GRANT REPLICATION SLAVE ON *.* TO "slave"@"192.168.56.101"; FLUSH PRIVILEGES; SHOW MASTER STATUS; 主服务器的状态包括日志文件的名称和服务器的写入位置 server-id = 2 read-only systemctl restart mysqld.service CHANGE MASTER TO MASTER_HOST = "192.168.56.100", MASTER_USER = "slave", MASTER_PASSWORD = "S3CR3t##", MASTER_LOG_FILE = "localhost-bin.000003", MASTER_LOG_POS = 1235; START SLAVE; SHOW SLAVE STATUS\G 工作原理 配置从master的/etc/my.cnf文件开始,我们在其中添加了server-id选项,为服务器提供了一个数字标识符。 复制设置中的每个服务器都使用此值来标识其他服务器,因此它在整个环境中必须是唯一的。 然后,我们取消注释log_bin选项,以指示服务器将每个更改的详细信息记录到二进制日志中。 主服务器的配置文件设置服务器标识符并启用日志记录 接下来,我们在主服务器上创建了一个专用帐户,并为其授予了REPLICATION SLAVE权限。 从站将使用此帐户连接到主站并从日志中读取: CREATE USER "slave"@"192.168.56.101" IDENTIFIED BY "S3CR3t##"; GRANT REPLICATION SLAVE ON *.* TO "slave"@"192.168.56.101"; 最后,我们执行了SHOW MASTER STATUS命令。 结果中的File和Position的值标识二进制日志文件的名称以及服务器在其中的当前位置。 当主服务器写入日志时,位置会增加,并且日志文件的后缀会在日志文件旋转时发生变化。 我们需要知道当前位置,以便我们可以配置从属设备从该点开始读取/复制. 在slave上,我们设置服务器的唯一标识符,并在配置文件中添加了只读选项。 如果有人要在slave的数据库中进行更改,该更改与来自二进制日志的传入更新冲突,则复制将中断。 只读选项是一种安全措施,可防止用户直接更新从数据库mssql复制,确保所有更新都来自主数据库。 接下来,我们使用CHANGE MASTER语句设置slave的复制过程。 CHANGE MASTER语句标识主服务器,设置从服务器将用于连接的用户名和密码,并标识日志的名称和开始复制的当前位置: CHANGE MASTER TO MASTER_HOST = "192.168.56.100", MASTER_USER = "slave", MASTER_PASSWORD = "S3CR3t##", MASTER_LOG_FILE = "localhost-bin.000003", MASTER_LOG_POS = 1235; 使用START SLAVE启动复制,并使用STOP SLAVE停止复制。 SHOW SLAVE STATUS返回有关当前复制状态的信息: 我们可以检查slave的状态,看看复制是否正在运行而没有任何问题 MySQL在复制运行时创建两个后台进程 - 一个与主进程通信(IO进程),另一个执行SQL语句以维护本地数据库(SQL进程)。 Slave_IO_Running值显示通信进程是否正在运行,而Slave_SQL_Running的值反映执行进程是否正在运行。 复制正在运行时,这两个值都应为Yes。 如果复制出现问题,Last_IO_Error和Last_SQL_Error条目将报告为其各自进程引发的任何错误。 您还可以通过将Master_Log_File和Read_Master_Log_Pos字段的值与SHOW MASTER STATUS返回的值进行比较来判断从器件与主器件的距离。 当前配置使slave能够从master复制每个数据库,但我们也可以通过在slave的my.cnf文件中添加replicate-do-db条目来限制复制到某些数据库。 可以给出多个条目,每个数据库将有一个条目: replicate-do-db = packt replicate-do-db = acme replicate-do-db = sakila 或者,我们可以使用replicate-ignore-db选项复制除特定数据库之外的所有内容: replicate-ignore-db = mysql 也可以在表级过滤复制,使用replicate-do-table和replicate-ignore-table选项定位和忽略数据库中的特定表: replicate-do-table = acme.customers replicate-do-table = acme.addresses See also Refer to the following resources for more information on replicating MySQL databases: (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |