MySQL实现双机热备
此操作默认两台服务器中 MySQL 完成初始化安装服务器A192.168.239.170服务器B192.168.239.1801、修改配置文件修改服务器A my.cnf 配置文件使其至少包含以下配置[mysqld] # 标识MySQL实例的唯一ID server_id1 # 开启二进制日志 log_binmysql-bin # 指定binlog记录模式 binlog_formatROW # 指定从库relay log文件名 relay-logrelay-log # 开启GTID复制 gtid_modeON # 保证所有事务都能生成GTID enforce_gtid_consistencyON # 从库执行的事务也写入自己的 binlog log_slave_updatesON修改服务器B my.cnf 配置文件使其至少包含以下配置server_id 需确保不同[mysqld] # 标识MySQL实例的唯一ID server_id2 # 开启二进制日志 log_binmysql-bin # 指定binlog记录模式 binlog_formatROW # 指定从库relay log文件名 relay-logrelay-log # 开启GTID复制 gtid_modeON # 保证所有事务都能生成GTID enforce_gtid_consistencyON # 从库执行的事务也写入自己的 binlog log_slave_updatesON配置修改完成后重启两台服务器的 MySQL 服务systemctl restart mysqld2、创建同步用户若服务器开启了防火墙需开发 MySQL 连接端口firewall-cmd--zonepublic --add-port3306/tcp--permanentfirewall-cmd--reload在服务器A中登录数据库mysql -uroot -p -h127.0.0.1创建 MySQL 主从复制用户并授予复制权限此步骤仅需在A库中操作待B库开启同步后会同步到B库-- 创建只允许服务器A连接的用户CREATEUSERrepl192.168.239.170IDENTIFIEDWITHmysql_native_passwordBY123456;-- 赋予复制权限GRANTREPLICATIONSLAVEON*.*TOrepl192.168.239.170;-- 创建只允许服务器B连接的用户CREATEUSERrepl192.168.239.180IDENTIFIEDWITHmysql_native_passwordBY123456;-- 赋予复制权限GRANTREPLICATIONSLAVEON*.*TOrepl192.168.239.180;-- 刷新权限FLUSHPRIVILEGES;配置GTID同步此时登录的是服务器A的MySQL所以A库为备库B库为主库-- 配置当前服务器的主库连接信息用于建立主从复制关系CHANGE MASTERTO-- 指定主库的IP地址这里是192.168.239.180MASTER_HOST192.168.239.180,-- 指定用于复制的用户名MASTER_USERrepl,-- 指定复制用户的密码MASTER_PASSWORD123456,-- 使用 GTID 自动定位复制位置不需要手动指定 binlog 文件和位置MASTER_AUTO_POSITION1;启动同步STARTSLAVE;在服务器B中登录数据库mysql -uroot -p -h127.0.0.1配置GTID同步此时登录的是服务器B的MySQL所以B库为备库A库为主库-- 配置当前服务器的主库连接信息用于建立主从复制关系CHANGE MASTERTO-- 指定主库的IP地址这里是192.168.239.170MASTER_HOST192.168.239.170,-- 指定用于复制的用户名MASTER_USERrepl,-- 指定复制用户的密码MASTER_PASSWORD123456,-- 使用 GTID 自动定位复制位置不需要手动指定 binlog 文件和位置MASTER_AUTO_POSITION1;启动同步STARTSLAVE;查看主备同步状态Slave_IO_Running和Slave_SQL_Running 均为 Yes 即主从配置成功SHOW SLAVE STATUS\G3、测试用例在A库中创建测试数据库及表结构并插入一条测试数据CREATEDATABASErepl_test;USErepl_test;CREATETABLEsync_test(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(50),create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP);INSERTINTOsync_test(name)VALUES(test1);在B库中查看数据是否同步select*fromrepl_test.sync_test;在B库中插入数据USErepl_test;INSERTINTOsync_test(name)VALUES(test2);INSERTINTOsync_test(name)VALUES(test3);在A库中查看数据是否同步至此MySQL 双机热备配置完成