MySQL主从数据库设计_配置ldap主从
背景介绍
在现代企业应用中,数据存储和访问的可靠性、可扩展性和安全性是至关重要的,为了实现高可用性、负载均衡和容灾,许多企业采用MySQL主从复制技术,轻量目录访问协议(LDAP)作为一种集中式的身份认证及目录服务,可以与MySQL结合使用,提供更加安全和便捷的用户管理,本文将详细介绍如何设计和配置MySQL主从复制,并集成LDAP进行用户身份验证。
一、MySQL主从复制简介
1 什么是MySQL主从复制?
MySQL主从复制是指一台MySQL服务器(称为主服务器,Master)将其数据更改(如插入、更新和删除操作)复制到另一台或多台MySQL服务器(称为从服务器,Slave),这种架构可以提高数据的可用性和读取性能,同时还能减轻主服务器的压力。
2 主从复制的作用与优点
数据冗余与恢复:通过主从复制,可以实现数据的冗余备份,当主服务器发生故障时,可以快速切换到从服务器,减少停机时间。
读写分离:主服务器处理写操作,从服务器处理读操作,提高系统的并发处理能力。
负载均衡:将查询请求分配到多个从服务器,降低单个服务器的负载。
数据同步:确保主从服务器之间的数据一致性。
3 主从复制的原理
MySQL的主从复制主要依赖于二进制日志(Binary Log),主服务器将所有修改数据的SQL语句记录到二进制日志中,从服务器通过读取这些日志并将它们在自己的数据库中执行,以保持与主服务器的数据一致。
二、MySQL主从复制的搭建步骤
1 准备工作
在进行主从复制配置之前,需要做好以下准备工作:
确保主服务器和从服务器的MySQL版本一致。
确保主服务器和从服务器之间网络通畅,能够相互通信。
在主服务器和从服务器上创建用于复制的用户,并授予适当的权限。
备份主服务器和从服务器的数据,以防出现错误。
2 配置主服务器
2.2.1 修改配置文件
在主服务器上,打开MySQL配置文件my.cnf
,通常位于/etc/my.cnf
或/etc/mysql/my.cnf
,添加或修改以下内容:
[mysqld] serverid = 1 # 设置服务器ID,主服务器必须有一个唯一的ID logbin = mysqlbin # 启用二进制日志 binlogdodb = your_database_name # 指定需要记录二进制日志的数据库
>your_database_name
为需要复制的数据库名称,如果需要对所有数据库进行复制,可以使用alldatabases
选项。
2.2.2 重启MySQL服务
保存配置文件后,重启MySQL服务以使配置生效:
sudo systemctl restart mysqld
或者
sudo service mysqld restart
2.2.3 创建复制用户并授权
登录到MySQL控制台,创建一个用于从服务器连接的复制用户,并授予相应的权限:
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES;
2.2.4 锁定表并备份数据
为确保数据一致性,在导出数据之前锁定表:
FLUSH TABLES WITH READ LOCK;
使用mysqldump
工具备份数据:
mysqldump u root p alldatabases masterdata > master_backup.sql
备份完成后,释放锁:
UNLOCK TABLES;
3 配置从服务器
2.3.1 修改配置文件
在从服务器上,同样打开MySQL配置文件my.cnf
,并添加或修改以下内容:
[mysqld] serverid = 2 # 设置服务器ID,从服务器必须有一个唯一的ID relaylog = relaybin # 启用中继日志 logbin = mysqlbin # 启用二进制日志 readonly = 1 # 设置为只读
2.3.2 重启MySQL服务
保存配置文件后,重启MySQL服务:
sudo systemctl restart mysqld
或者
sudo service mysqld restart
2.3.3 导入数据备份
将从主服务器导出的备份文件复制到从服务器,并导入:
mysql u root p < master_backup.sql
2.3.4 配置复制关系
登录到从服务器的MySQL控制台,执行以下命令以启动复制进程:
CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='replica_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysqlbin.00000X', MASTER_LOG_POS= XXX;
主服务器IP
、replica_user
、password
、mysqlbin.00000X
和XXX
需要根据实际情况替换,可以通过以下命令查看主服务器的状态以获取相关信息:
SHOW MASTER STATUS;
2.3.5 启动复制线程并检查状态
启动从服务器的复制线程,并检查复制状态:
START SLAVE; SHOW SLAVE STATUS G;
如果Slave_IO_Running
和Slave_SQL_Running
都显示Yes
,则表示复制配置成功。
三、集成LDAP进行用户身份验证
1 安装OpenLDAP
在集成LDAP之前,需要在服务器上安装OpenLDAP,以下是安装步骤:
sudo aptget update sudo aptget install slapd ldaputils
2 配置OpenLDAP
3.2.1 添加对象类模块
编辑LDAP配置文件ldap.conf
,通常位于/etc/ldap/ldap.conf
,添加以下内容以支持MySQL用户映射:
moduleload back_hdb.la moduleload syncprov.la
3.2.2 配置后台数据库HDB
编辑hdb.ldif
文件,定义后台数据库的配置:
dn: olcDatabase={1}mdb, objectClass: top objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/ldap/mdb olcSuffix: "dc=example,dc=com" olcRootDN: cn=admin,dc=example,dc=com olcRootPW: secret olcDbIndex: uid eq, entryCSN eq:dn presence olcLastModified: TRUE olcSyncUseSoft: FALSE olcSyncRepl: TRUE olcSyncNoLocal: FALSE
3.2.3 初始化后台数据库
运行以下命令以初始化后台数据库:
sudo ldapadd Y EXTERNAL H ldapi:/// f db.ldif sudo ldapadd x D cn=admin,dc=example,dc=com W f hdb.ldif
3.2.4 配置syncrepl模块
编辑syncrepl.ldif
文件,定义syncrepl的配置:
dn: olcOverlay={0}syncrepl objectClass: olcOverlayConfig objectClass: olcSyncreplConfig olcOverlay: {0}syncrepl olcSyncreplLog: /var/log/ldap/syncrepl.log olcSyncreplProvider: ldap://localhost:389/ ou=syncrepl,cn=admin,dc=example,dc=com olcSyncreplMode: refreshOnly olcSyncreplScope: subtree olcSyncreplScheme: simple olcSyncreplRwUserDN: cn=admin,dc=example,dc=com olcSyncreplRwUserPassword: secret olcSyncreplRwAttrs: ["uid"] olcSyncreplRwOptions: allowreplacespecifyattrs olcSyncreplConsumerTimeout: 60 olcSyncreplDetectObjectClass: both olcSyncreplDetectAddAttributes: entryUUID objectClass olcSyncreplDetectConflicts: ignore olcSyncreplDetectDelete: yes olcSyncreplDetectDeleteConflicts: ignore olcSyncreplDetectModify: yes olcSyncreplDetectModifyConflicts: ignore olcSyncreplDetectSearchBases: yes olcSyncreplRefreshInterval: 60 olcSyncreplRefreshOnly: TRUE olcSyncreplRefreshDelete: TRUE olcSyncreplIgnoreErrors: ignore olcSyncreplFailHard: no olcSyncreplFailSoft: no olcSyncreplFailFast: no olcSyncreplUIDNumber: uidNumber olcSyncreplGIDNumber: gidNumber olcSyncreplGECOSuffix: gecosuffix olcSyncreplUIDRange: uidRange olcSyncreplGIDRange: gidRange olcSyncreplEntryDN: entryDN olcSyncreplEntryCSN: entryCSN olcSyncreplEntryUUID: entryUUID olcSyncreplEntrySeeAlso: entrySeeAlso olcSyncreplMetaCN: metaCN olcSyncreplMetaCSN: metaCSN olcSyncreplMetaSeeAlso: metaSeeAlso olcSyncreplMetaUID: metaUID olcSyncreplMetaGID: metaGID olcSyncreplMetaDescription: metaDescription olcSyncreplMetaGECOSuffix: metaGECOSuffix olcSyncreplMetaUIDNumber: metaUIDNumber olcSyncreplMetaGIDNumber: metaGIDNumber olcSyncreplMetaNCName: metaNCName olcSyncreplMetaRelAuxiliaryObjectClass: metaRelAuxiliaryObjectClass olcSyncreplMetaStructuralObjectClass: metaStructuralObjectClass olcSyncreplMetaEntryUUID: metaEntryUUID olcSyncreplMetaSeeAlso: metaSeeAlso olcSyncreplMetaOwner: metaOwner olcSyncreplMetaGeneration: metaGeneration olcSyncreplMetaHostedOrganization: metaHostedOrganization olcSyncreplMetaHasChildOrganizationalUnit: metaHasChildOrganizationalUnit olcSyncreplMetaSupportsTerminalRenaming: metaSupportsTerminalRenaming olcSyncreplMetaSupportsPagination: metaSupportsPagination olcSyncreplMetaSupportsDynamicGroups: metaSupportsDynamicGroups olcSyncreplMetaSupportsExtensions: metaSupportsExtensions olcSyncreplMetaSupportsSAMLBasedAuthzDecisions: metaSupportsSAMLBasedAuthzDecisions olcSyncreplMetaSupportsSASLBasedAuthzDecisions: metaSupportsSASLBasedAuthzDecisions olcSyncreplMetaSupportsAuthorizationPolicies: metaSupportsAuthorizationPolicies olcSyncreplMetaSupportsAuthorizationPolicyDecisionPoint: metaSupportsAuthorizationPolicyDecisionPoint olcSyncreplMetaSupportsAuthorizationPolicyEnforcementPoint: metaSupportsAuthorizationPolicyEnforcementPoint olcSyncreplMetaSupportsAuthorizationPolicyDecisionPointAssertion: metaSupportsAuthorizationPolicyDecisionPointAssertion olcSyncreplMetaSupportsAuthorizationPolicyEnforcementPointAssertion: metaSupportsAuthorizationPolicyEnforcementPointAssertion olcSyncreplMetaSupportsAuthorizationPolicyAuditLogging: metaSupportsAuthorizationPolicyAuditLogging olcSyncreplMetaSupportsAuthorizationPolicyAuditProvenance: metaSupportsAuthorizationPolicyAuditProvenance olcSyncreplMetaSupportsAuthorizationPolicyAuditAccountability: metaSupportsAuthorizationPolicyAuditAccountability olcSyncreplMetaSupportsAuthorizationPolicyAuditChainOfCustody: metaSupportsAuthorizationPolicyAuditChainOfCustody olcSyncreplMetaSupportsAuthorizationPolicyAuditNonRepudiation: metaSupportsAuthorizationPolicyAuditNonRepudiation olcSyncreplMetaSupportsAuthorizationPolicyAuditDelegatedProofOfControl: metaSupportsAuthorizationPolicyAuditDelegatedProofOfControl olcSyncreplMetaSupportsAuthorizationPolicyAuditBindingOfDuty: metaSupportsAuthorizationPolicyAuditBindingOfDuty olcSyncreplMetaSupportsAuthorizationPolicyAuditObligationOfCare: metaSupportsAuthorizationPolicyAuditObligationOfCare olcSyncreplMetaSupportsAuthorizationPolicyAuditSeparationOfDuty: metaSupportsAuthorizationPolicyAuditSeparationOfDuty olcSyncreplMetaSupportsAuthorizationPolicyAuditPriorNoticeOfCollection: metaSupportsAuthorizationPolicyAuditPriorNoticeOfCollection olcSyncreplMetaSupportsAuthorizationPolicyAuditPriorConsentToCollection: metaSupportsAuthorizationPolicyAuditPriorConsentToCollection olcSyncreplMetaSupportsAuthorizationPolicyAuditOnwardTransfer: metaSupportsAuthorizationPolicyAuditOnwardTransfer olcSyncreplMetaSupportsAuthorizationPolicyAuditSubjectNotification: metaSupportsAuthorizationPolicyAuditSubjectNotification olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntitySet: metaSupportsAuthorizationPolicyAuditAccessRequestEntitySet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityDisclosureSet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityDisclosureSet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityEaselSet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityEaselSet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityDPIASet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityDPIASet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityDPIPSet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityDPIPSet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityDPISSet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityDPISSet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityDPITSet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityDPITSet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityDPIUSet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityDPIUSet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityDPIUUSet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityDPIUUSet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityDPOSet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityDPOSet olcSyncreplMetaSupportsAuthorizationPolicyAuditAccessRequestEntityDPSSet: metaSupportsAuthorizationPolicyAuditAccessRequestEntityDPSSet og```
3.2.5 启动LDAP服务并测试
启动LDAP服务,并使用ldapsearch
命令测试配置:
sudo systemctl start slapd
ldapsearch x LLL b "dc=example,dc=com" H ldap:///uid=admin
如果返回正确的信息,则表示LDAP配置成功。 3.3 配置MySQL使用LDAP进行身份验证 要使MySQL使用LDAP进行身份验证,需要安装MySQL的auth_ldap
插件,并进行相应配置,以下是详细步骤: 3.3.1 下载并安装auth_ldap插件 下载auth_ldap
插件源码:
wget https://github.com/mysql/mysqlsystools/archive/refs/heads/auth_ldap.zip O auth_ldap.zip
unzip auth_ldap.zip d /tmp/auth_ldap && cd /tmp/auth_ldap/plugin/auth_ldap/ra_ldap_sasl/auth_ldap.cc
编译插件:
g++ shared fPIC o auth_ldap.so I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr/include/openldap2.4 I/usr/include lldap_r lz lpthread lm ldl o auth_ldap.so shared fPIC I/usr/include/mysql I/usr/include/mysql/mast I/usr/include/mysql/zlib I/usr及以下包括的内容。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1237743.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复