从零到一:手把手教你搞定 MySQL 8.0 安装与配置(GLIBC 源码编译) 📅 2026/7/22 14:48:48 MySQL概述关系型数据库与非关系型数据库RDBMSrelational database management system关系型数据库管理系统简单来说关系型数据库是指采用了二维表格来组织数据的数据库。在行业中数据库一般分为两种关系型数据库和非关系型数据库。非关系型数据库并不是通过二维表格来维护数据。而是通过 key/value 键值对来维护数据的。常见的关系型数据库oracle、MySQL、DB2IBM、Sybase、SQL serverMicrosoft 微软、IBM Informix关系型数据库的最大的特点就是事务的一致性所以对事物一致性的维护会占有很大的开销什么是事务事务是由一条或多条 SQL 语句组成在事务的操作中这些 SQL语句要么都成功执行要么都不执行这就是一个事务。举例说明登录 ATM 机输入密码连接数据库验证密码验证成功获取用户信息比如存款余额等用户输入需要转账金额按下确认键从后台数据库中减掉用户账户上的对应金额update 语句从后台数据库中给对方账户增加响应的金额update 语句确认退卡走人事务的特点ACID原子性Atomicity:事物的全部操作在数据库中是不可分割的要么全部完成要么均不执行。一致性Consistency指事务必须使数据库从一个一致性状态变换到另一个一致性状态也就是说一个事务执行之后都必须处于一致型状态不能破坏关系数据的完整性以及业务逻辑的一致性。隔离性lsolation一个事务的执行不受其他事务的干扰事务执行的中间结果对其他事务必须是透明的。隔离性是当多个用户并发访问数据库时比如操作同一张表时数据库为每一个用户开启的事务不能被其他事务的操作干扰多个并发事务之间要相互隔离。持久性Durability持久性是指一个事务一旦被提交了那么对数据库中的数据的改变就是永久性的即便是在数据库系统遇到故障的情况下也不会提交事务的操作。对数据的一致性要求较高的就是银行及支付系统类。MySQL 数据库概述MySQL 是一种关系型数据库管理系统由瑞典 MySQL AB 公司开发目前属于 Pracle 旗下MySQL 是 C/S 架构MySQL 数据库版本社区版MySQL Community EditonGPL可以看做企业版的广泛体验版没有经过各个专有系统平台的压力测试和性能测试基于 GPL 协议发布可以随意下载使用没有任何官方技术支持服务。企业版MySQL Enterprise Editioncommercial提供比较全面的高级功能、管理工具以及技术支持安全性、稳定性、可扩展性比较好集群版MySQL Cluster CGEcommercial扩充关于版本的命名方式如何定义版本说明α ( Alpha )版内测版,内部交流或者专业测试人员测试用 Bug 较多,普通用户最好不要安装β ( Beta )版公测版,专业爱好者大规模测试用,存在一些缺陷,该版本也不适合一般用户安装γ ( Gamma ) 版相当成熟的测试版,与即将发行的正式版相差无几Final正式版本版本说明Free自由版本Release发行版本Standard标准版本Mini迷你精简版本 , 只有最基本的功能Upgrade升级版本GA(GenerallyAvailable)开发团队认为该版本是稳定版 , 可以在较为关键的场合使用Retail零售版获取 MySQL 软件官网https://www.mysql.com/单机 Downloads 下载找到社区版单机进入 MySQL 社区版下载页面选择合适的版本GLIBC相当于 Windows 中的绿色版2. 源码编译版本需要源码编译三步走配置编译安装MySQL 的安装MySQL 的安装方式二进制软件包安装yum 安装和 rpm 安装glibc 版本安装相当于 Windows 中的绿色软件命名: mysql-8.0.46-linux-glibc2.28-x86_64.tar.xz依赖glibc库,可以安装在通用的Linux系统下源码包编译安装命名:mysql-boost-8.0.46.tar.gz,通用的Linux下都可以编译安装三种安装方式的区别安装方式优点缺点rpm安装卸载简单可定制性差glibc可定制性相比 rpm 包灵活些安装相比 rpm 包复杂些,需要手动初始化数据库源码安装可定制性最强,根据需求和功能定制安装麻烦,需要手动初始化数据库在企业中,数据库的安装很少使用rpm方式,大部分都是基于源码安装以及glibc安装!区别数据库与数据库实例什么是 MySQL 数据库数据库(database): 操作系统或存储上的数据文件的集合mysql数据库中, 数据库文件可以是* .frm.MYD.MYI*.ibd等结尾的文件, 不同存储引擎文件类型不同什么是MySQL数据库实例?数据库实例(instance): 由后台进程或者线程以及一个共享内存区组成共享内存可以被运行的后台线程所共享 数据库实例才是真正操作数据库的 注意:MySQL的后台守护程序mysqld是单进程多线程的工作模式什么是MySQL数据库服务器?数据库服务器(database server):部署安装数据库实例的服务器数据库和数据库实例之间的关系是什么通常情况下,数据库实例和数据库是一一对应的关系,也就是一个数据库实例对应一个数据库; 但是,在集群环境中存在多个数据库实例共同使用一个数据库MySQL 的 GLIBC 版本安装获取 MySQL GLIBC 版本学会看官方文档安装 MySQL 依赖库软件克隆模板机生成 MySQL 服务器启动系统更改主机名为 mysql.aliyun.cn重启网络拍摄快照安装依赖库 libaio 库yuminstalllibaio-y上传软件包解压,了解目录结构tar-xfmysql-8.0.46-linux-glibc2.28-x86_64.tar.xzlsmysql-8.0.46-linux-glibc2.28-x86_64解压完成后目录结构如下图所示安装需求选项值(自定义也可以采用默认形式)安装路径/mysql_3306数据路径/mysql_3306/data端口号3306软件的安装查看官方说明https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html要安装和使用 MySQL 二进制发现版命令序列如下创建一个数据库专用账号 mysql其所数组也为 mysqlgroupaddmysqluseradd-r-gmysql-s/bin/false mysql清空系统中的原有rm-rf/etc/my.cnf把 mysql 解压后的压缩包移动到/opt/ 目录下mvmysql-8.0.46-linux-glibc2.28-x86_64 /opt/mysql创建一个 mysql-filesmkdirmysql-files更改 mysql-filess 权限chownmysql:mysql mysql-fileschmod750mysql-files初始化数据库bin/mysqld--initialize--usermysql--basedir/opt/mysql选项说明–initialize初始化真正开始干活–usermysql以mysql用户的身份初始化数据库产生文件都是mysql作为拥有者–basedirxxxmysql其安装目录非常重要运行完毕后观察最后一行保存 root 账号的密码以备后期使用设置安全加密连接SL数据传输会采用加密形式适合敏感数据bin/mysqld--ssl--datadir/opt/mysql/data--usermysql启动数据库cpsupport-files/mysql.server /etc/init.d/mysql.server默认情况下GBLIC版本的数据库要求安装到/usr/local/mysql目录其 mysql.server脚本中对应的目录也是/usr/local/mysql这会导致mysql无法启动。所以可以更改其basedir以及datadir两个变量vim/etc/init.d/mysql.server启动 MySQL 数据库不能使用 systemctl只能使用 serviceservicemysql start特别说明当MySQL启动成功后其日志会自动写入到data数据目录中的主机名称.err文件中这个文件一定要多看涉及MySQL无法启动、启动报错其详细的原因99%在.err文件中可以找到问题所在软件的安装常见问题答疑问题 1****问题1为什么一定要删除/etc/my.cnf文件不删除有何影响答/etc/my.cnf文件是操作系统为mariadb软件预留的配置的文件之所以一定要删除这个文件主要原因在于数据库在初始化时首先在自己的安装目录下寻找有没有my.cnf配置文件如果有会自动根据里面的配置信息进行初始化。如果找不到则到/etc目录下寻找my.cnf文件如果有依然会按照其内部的配置进行初始化但是由于/etc目录下的my.cnf文件是mariadb的这会导致我们的初始化如果按照mariadb的配置会导致初始化失败。问题2mysql_les文件夹到底是干什么的答目前mysql-les没有什么用但是你必须要创建因为GLIBC属于二进制软件包其很多配置已经默认了包括mysql-les文件夹如果没有这个文件夹可能导致mysql无法启动。问题3到底怎么判断数据库是否初始化成功答数据库的安装容易出错的地方就是初始化一旦初始化失败了数据库100%启动报错。如何确认数据库是否初始化成功了呢主要看安装目录下有没有生成一个data的文件夹。问题4为什么一定要把mysql.server放在/etc/init.d目录下不放可不可以答不放也可以但是这个时候就不能使用service命令启动以及添加到开机启动项了。只能通过bin/mysqld_safe脚本启动数据库。问题5为什么一定要改变/etc/init.d/mysql.server 中的basedir与datadir答GLIBC版本属于二进制版本默认已经配置了很多内容包括默认的安装路径/usr/local/mysql一旦你的mysql没有安装在这个目录下则必须手工设置basedir以及datadir其位置否则脚本无法启动mysql程序问题6如何让mysql自动启动?chkconfig--list# 查询系统中的所有开机启动项chkconfig--addmysql# 必须与/etc/init.d目录下的脚本名称一致chkconfigmysql on# 把2345四种模式全部开启3字符界面5图形界面问题 7如果密码丢失或错误使用初始密码进不去使用--skip-grant-tables模式重置密码。停止当前运行的 mysql 进程# 查看 mysqld 进程IDps-ef|grepmysqld# 杀掉进程kill-9进程ID以跳过权限表模式启动 MySQLcd/opt/mysql bin/mysqld --skip-grant-tables--datadir/opt/mysql/data--usermysql --skip-networking无密码登录 MySQLbin/mysql-uroot-S/tmp/mysql.sock重置 root 密码-- 先刷新权限表 FLUSH PRIVILEGES;-- 修改密码MySQL8.0语法 ALTERUSERrootlocalhostIDENTIFIED BY你的新密码;-- 修改完成后退出 EXIT;停止 MySQL 进程重新正常启动kill-9进程ID bin/mysqld--ssl--datadir/opt/mysql/data--usermysql使用新密码登录bin/mysql-uroot-p-S/tmp/mysql.sockMySQL CLIBC 版本后续配置更改管理员 root 账户的密码bin/mysqladmin-urootpasswordroot-p把 mysql 客户端命令添加到环境变量以后随时 可以访问echoexport PATH$PATH:/opt/mysql/bin/etc/profilesource/etc/profile手工定义 MySQL 的配置文件vim/opt/mysql/my.cnf[mysqld]basedir/opt/mysqldatadir/opt/mysql/datasocket/tmp/mysql.sock选项说明[mysql]代表针对服务器端进行配置basedir代表数据库的安装目录datadir代表数据目录以后专门用于存放数据文件的核心目录socket代表套接字文件专门为客户端与服务端连接提供的一个桥梁servicemysql restart安全配置mysql_secure_installation输入密码后一个要求是否改密码选择N不改后续的一直按Y就可以了MySQL 的源码安装参考 MySQL 源码安装官方文档官方文档https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html源码安装三部曲配置–编译–安装安装须知软件包mysql-boost-8.0.46.tar.gz 可以在任意发行版的 Linux 下安装安装需求安装需求具体配置安装目录basedir/mysql_3307数据目录datadir/mysql_3307/data端口号3307socket文件位置$basedir/mysql.sock字符集utf8mb4常用的配置选项配置选项描述默认值建议值CMAKE_INSTALL_PREFIX安装基目录(basedir)/usr/local/mysql根据需求MYSQL_DATADIR数据目录(datadir)$basedir/data根据需求SYSCONFDIR默认配置文件 my.cnf 路径/etcMYSQL_TCP_PORTTCP/IP端口3306非默认端口MYSQL_UNIX_ADDR套接字 socket 文件路径/tmp/mysql.sock$basedir/DEFAULT_CHARSET默认字符集latin1utf8mb4DEFAULT_COLLATION默认校验规则latin1_swedish_ciutf8mb4_general_ciWITH_EXTRA_CHARSETS扩展字符集allallENABLED_LOCAL_INFILE是否启用本地加载外部数据文件功能OFF建议开启WITH_SSLSSL支持类型system建议显式指定WITH_BOOSTBoost库源代码的位置Boost库是构建MySQL所必需的,建议事先下载存储引擎相关配置项说明以下选项值均为布尔值0或10代表不编译到服务器中1代表编译建议都静态编译到服务器中。其他的存储引擎可以根据实际需求在安装时通过WITH_xxxx_STORAGE_ENGINE1的方式编译到服务器中。配置选项描述WITH_INNOBASE_STORAGE_ENGINE将InnoDB存储引擎插件构建为静态模块编译到服务器中建议编译到服务器中WITH_PARTITION_STORAGE_ENGINE是否支持分区WITH_FEDERATED_STORAGE_ENGINE本地数据库是否可以访问远程mysql数据WITH_BLACKHOLE_STORAGE_ENGINE黑洞存储引擎接收数据但不存储直接丢弃WITH_MYISAM_STORAGE_ENGINE将MYISAM存储引擎静态编译到服务器中MySQL的源码编译安装在安装之前建议拍摄一个快照安装MySQL编译需要用到的依赖库yuminstalllibtirpc-devel gcc-toolset-12-gcc gcc-toolset-12-gcc-c gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc上传软件到服务器端并解压tar-xfmysql-boost-8.0.46.tar.gzcdmysql-8.0.46# 2. 创建一个独立的构建目录与源代码平级 mkdir build # 3. 进入构建目录 cd build配置基于cmake进行配置vimmyconfig.shcmake.\-DCMAKE_INSTALL_PREFIX/mysql_3307\-DMYSQL_DATADIR/mysql_3307/data\-DMYSQL_TCP_PORT3307\-DMYSQL_UNIX_ADDR/mysql_3307/mysql.sock\-DWITH_INNOBASE_STORAGE_ENGINE1\-DWITH_PARTITION_STORAGE_ENGINE1\-DWITH_FEDERATED_STORAGE_ENGINE1\-DWITH_BLACKHOLE_STORAGE_ENGINE1\-DWITH_MYISAM_STORAGE_ENGINE1\-DENABLED_LOCAL_INFILE1\-DEXTRA_CHARSETSall\-DDEFAULT_CHARSETutf8mb4\-DDEFAULT_COLLATIONutf8mb4_general_ci\-DWITH_SSLsystem\-DWITH_BOOSTboostchmodx myconfig.sh ./myconfig.sh选项说明-DCMAKE_INSTALL_PREFIX安装路径-DMYSQL_DATADIR数据目录-DMYSQL_TCP_PORT端口号-DMYSQL_UNIX_ADDR套接字文件位置编译安装make-j2makeinstall选项说明-j2代表同时开启多个线程共同实现编译操作编译报错常见问题解析问题1没有boost导致安装失败问题 2 缺少依赖先安装 crb 源在安装依赖# 启用 CRBCodeReady Builder源CentOS 9 / RHEL 9yum config-manager --set-enabled crb# 或使用 dnfCentOS 9 默认使用 dnf 替代 yumdnfinstall-ylibtirpc-devel问题 3编译安装中途报错解决方案只能重新编译一下rm-fCMakeCache.txtmake-j2makeinstallMysql数据库的初始化进入到安装目录/mysql_3307cd/opt/mysql_3307第一步创建mysql-files目录mkdirmysql-fileschown-Rmysql:mysql /mysql_3307chmod750mysql-files第二步数据库初始化操作bin/mysqld--initialize--usermysql--basedir/opt/mysql_3307--datadir/opt/mysql_3307/data第三步拷贝mysql.server脚本到/etc/init.d目录然后启动数据库cpsupport-files/mysql.server /etc/init.d/mysql_3307servicemysql_3307 start5、MySQL源码编译安装后的后续配置第一步编写mysql配置文件my.cnfvim/opt/mysql_3307/my.cnf[mysqld]basedir/opt/mysql_3307datadir/opt/mysql_3307/datasocket/opt/mysql_3307/mysql.sockservicemysql_3307 restart第二步设置管理员密码bin/mysqladmin-uroot passwordroot-p第三步安全设置# bin/mysql_secure_install ation输入密码后不更改密码一直Y第四步添加mysql_3307到开机启动项chkconfig--addmysql_3307chkconfigmysql_3307 onMysql常见问题解决方案如何访问不同的数据库呢方法一直接使用对应的客户端软件访问/opt/mysql_3306/bin/mysql-uroot-p/opt/mysql_3307/bin/mysql-uroot-p方法二定义别名的方式访问aliasmysql_3306/mysql_3306/bin/mysqlaliasmysql_3307/opt/mysql_3307/bin/mysqlmysql_3306-uroot-pmysql_3307-uroot-p方法三拷贝相应命令到PATH可以识别的路径下并重命令unaliasmysql_3306unaliasmysql_3307cp/mysql_3306/bin/mysql /usr/bin/mysql_3306cp/mysql_3307/bin/mysql /usr/bin/mysql_3307whichmysql_3306whichmysql_3307深度思考我们之所以能够连接到数据库的本质是什么 答套接字MySQL忘记密码的解决方案①跳过授权表②跳过授权表重启数据库关闭数据库mysqladminshutdown-p跳过授权表启动/opt/mysql_3306/bin/mysqld --defaults-file/mysql_3306/my.cnf --skip-grant-tables --skip-networkingon--usermysql刷新授权表mysql-uroot-p不用输入密码直接回车fiush privileges;修改密码alter userrootlocalhostidentified byroot;补充如果未能成功则使用以下语句修改密码UPDATE mysql.user SET authentication_stringPASSWORD(MyNewPass)WHERE UserrootAND Hostlocalhost;FLUSH PRIVILEGES;修改密码后使用jobskill命令停止正在允许的Mysqld进程。然后使用service启动服务jobskill%1servicemysql_3306 startUnix和类Unix系统重置了解①停止数据库mysqladminshutdown-p②编写创建密码语句到文件echoALTER USER rootlocalhost IDENTIFIED BY 123;/opt/mysql_3306/mysql.pass注意该文件一定要对启动用户如mysql有所有权限chown-Rmysql. /opt/mysql_3306③指定密码文件启动数据库mysqld --defaults-file/mysql_3306/my.cnf --init-file/mysql_3306/mysql.pass--usermysql④删除密码文件并测试rm-f/mysql_3306/mysql.pass mysql-uroot-p