当前位置: 首页 > 科技观察

MySQL系列-源码编译安装(v5.7.34)

时间:2023-03-13 00:39:45 科技观察

1.系统环境要求官方说明:https://dev.mysql.com/doc/refman/5.7/en/source-installation-prerequisites.htmlCMake:编译工具,用作所有平台上的构建框架。SSL库需要支持加密连接、用于生成随机数的熵以及其他与加密相关的操作。默认情况下,构建使用安装在主机系统上的OpenSSL库。构建MySQL需要BoostC++库。MySQL编译需要特定的Boost版本。5.7.34版本所需的Boost版本为1.59.0。它需要ncurses库,一个动态库,可以提供功能键定义(快捷键)、屏幕绘制、基于文本终端的图形交互功能。足够的空闲内存。如果编译时出现“internalcompilererror”之类的问题,可能是内存太小了。如果在虚拟机上编译,请尝试增加内存分配。获取开发源码需要Git版本控制系统。本文使用本地VM虚拟机进行部署和测试。操作系统:CentOSLinuxrelease7.8.2003(Core)虚拟机配置:2核CPU,4G内存,关闭Selinux。二、基础环境1、清理环境(清理系统自带的Mariadb和boost)CentOS7版本的系统默认安装了MariaDB,需要先进行清理。##查询已安装的mariadbrppm-qa|grepmariadb或yumlistinstalled|grepmariadb##卸载mariadb包,文件名为rpm-e--nodepsmariadb-libs-5.5.65-1.el7.x86_64或yum查询到的文件上面命令-yremovemariadb-libs.x86_64##查看boost版本,如果有则卸载boost-*等库rpm-qaboost*yum-yremoveboost-*2。基础库和依赖包文件-develzlibzlib-devel\libgcryptglibcglibc-develglib2glib2-develflex*velsdevelsdeopensl-curl2*安装cmake(编译工具)官网:https://cmake.org/cd/data/toolswgethttps://cmake.org/files/v3.8/cmake-3.8.2.tar.gztarxfcmake-3.8.2.tar。gzcdcmake-3.8.2./bootstrapgmakemakeinstall4。安装jemalloc(内存管理)官网:http://jemalloc.net/内存分配器,适用于多线程下的内存分配管理软件。与其他内存分配器相比,它最大的优势在于在多线程情况下的高性能和内存碎片的减少。cd/data/toolswgethttps://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2tarxjfjemalloc-5.2.1.tar.bz2cdjemalloc-5.2.1./autogen。shmake&&makeinstallecho'/usr/local/lib'>/etc/ld.so.conf.d/local.confldconfig5.安装Boost库官网:https://www.boost.org/不需要最新版本,本文编译安装的5.7。版本34对应于1.59.0所需的提升。cd/data/toolswgethttps://udomain.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gztarxfboost_1_59_0.tar.gzchown-Rroot.rootboost_1_59_0chmod-R755boost_1_59_0mvboost_1_59_0/usr/local93.安装配置MySQL1.添加mysql组和用户组add-rmysqluseradd-gmysql-r-s/sbin/nologin-M-d/data/mysqlmysql2。创建相关目录并修改目录属性##数据目录mkdir-p/data/mysql##修改目录属性chownmysql.mysql/data/mysqlchmod0700/data/mysql3.安装MySQL##下载并解压cd/data/toolswgethttps://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.34.tar.gztarxfmysql-5.7.34.tar.gzcdmysql-5.7.34##cmake配置cmake.-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.34\-DMYSQL_DATADIR=/data/mysql-DSYSCONFDIR=/etc\-DMYSQL_TCP_PORT=3306\-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.34/mysql.sock\-DWITH_EXTRA_CHARSETS=all\-DDEFAULT_CHARSET=utf8mb4\-DDEFAULT_COLLATION=utf8mb4_general_ci\-DWITH_INNOBASE_STORAGE_ENGINE=1\-DWITH_MYISAM_STORAGE_ENGINE=1\-DWITH_ARCHIVE_STORAGE_ENGINE=1\-DWITH_FEDERATED_STORAGE_ENGINE=1\-DWITH_BLACKHOLE_STORAGE_ENGINE=1\-DWITH_PERFSCHEMA_STORAGE_ENGINE=1\-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1\-DWITH_ZLIB=bundled-DWITH_SSL=system\-DENABLED_LOCAL_INFILE=1\-DWITH_DEBUG=0\-DMYSQL_MAINTAINER_MODE=0\-DWITH_EMBEDDED_SERVER=0\-DIR_STALL_SHAREDOW=0\-DIN0STALL_SHAREDOW=NDWITH_BOOST=/usr/local/boost159\-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc"##编译安装makemakeinstallcd/usr/local/ln-sfmysql-5.7.34mysql注意:如果make报错后要重新运行配置,需要删除CMakeCache.txt文件makecleanrm-fCMakeCache.txt##Cmake配置参数说明-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.34:MySQL安装目录路径。-DMYSQL_DATADIR=/data/mysql:MySQL数据目录路径,初始化时该目录必须为空。-DSYSCONFDIR=/etc:指定配置文件my.cnf的安装路径。-DMYSQL_TCP_PORT=3306:指定MySQL服务TCP/IP连接的端口号为3306。-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.34/mysql.sock:指定socket连接的Unixsocket文件路径。-DWITH_EXTRA_CHARSETS=all:指定包含的附加字符集,all表示全部。-DDEFAULT_CHARSET=utf8mb4:指定默认字符集为utf8mb4。由于历史问题,MySQL中的utf8并不是真正的utf8,而是阉割版。最长的只有三个字节。遇到四字节的utf8编码,会导致存储异常。从5.5.3开始,使用utf8mb4实现fullutf8。-DDEFAULT_COLLATION=utf8mb4_unicode_ci:指定collat??ion,默认为utf8mb4_0900_ai_ci,属于utf8mb4_unicode_ci。0900指Unicode校对算法版本,ai指accentinsensitivity(as表示敏感),ci表示caseinsensitive(cs表示区分)。utf8mb4_unicode_ci表示基于标准Unicode进行排序比较,可以在各种语言之间进行准确排序,而utf8mb4_general_ci在遇到一些特殊字符集时可能排序结果不一致,精度较差,但性能较好,比较排序是快点。-DWITH_INNOBASE_STORAGE_ENGINE=1:启用INNOBASE存储引擎。-DWITH_MYISAM_STORAGE_ENGINE=1:开启MYISAM存储引擎。-DWITH_ARCHIVE_STORAGE_ENGINE=1:启用ARCHIVE存储引擎-DWITH_FEDERATED_STORAGE_ENGINE=1:启用FEDERATED存储引擎。-DWITH_BLACKHOLE_STORAGE_ENGINE=1:开启BLACKHOLE存储引擎。-DWITH_PERFSCHEMA_STORAGE_ENGINE=1:启用PERFSCHEMA存储引擎。-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1:不启用或编译EXAMPLE存储引擎。EXAMPLE存储引擎是一个什么都不做的存根引擎。它旨在作为MySQL源代码中的示例来演示如何开始编写新的存储引擎。-DWITH_ZLIB=bundled:启用libz库支持,使用与发行版捆绑在一起的zlib库。-DWITH_SSL=system:启用ssl库支持,使用系统的SSL库,如果不使用系统,请自定义路径。-DENABLED_LOCAL_INFILE=1:表示可以使用loaddata命令。-DWITH_DEBUG=0:禁用调试调试支持。-DMYSQL_MAINTAINER_MODE=0:关闭MySQL维护者专用的开发环境。-DWITH_EMBEDDED_SERVER=0:不构建libmysqld嵌入式服务器库。libmysqld嵌入式服务器库自MySQL5.7.17以来已被弃用,并已在MySQL8.0中删除。-DINSTALL_SHAREDIR=share:指定aclocal/mysql.m4安装目录-DDOWNLOAD_BOOST=0:禁用下载Boost源。-DWITH_BOOST=/usr/local/boost159:指定Boost库目录的位置。-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc":使用jemalloc优化MySQL内存管理。四、配置MySQL1.创建配置文件vi/etc/my.cnf//输入以下内容[client]port=3306socket=/usr/local/mysql/mysql.sockdefault-character-set=utf8mb4[mysqld]port=3306socket=/usr/local/mysql/mysql.sockbasedir=/usr/local/mysqldatadir=/data/mysqlcharacter-set-server=utf8mb4collat??ion-server=utf8mb4_general_ciinit_connect='SETNAMESutf8mb4'server-id=1log-slave-updates=trueskip-external-lockingskip-name-resolveback_log=300table_open_cache=128max_allowed_pa??cket=16Mread_buffer_size=8Mread_rnd_buffer_size=64Msort_buffer_size=16Mjoin_buffer_size=8Mkey_buffer_size=128Mthread_cache_size=16log-bin=mysql-binbinlog_format=row########从log-slave-updates##慢日志slow_query_log=onlong_query_time=1slow_query_log_file=/data/mysql/db-slow.loggtid_mode=ONenforce_gtid_consistency=ONexpire_logs_days=7default_storage_engine=InnoDBinnodb_buffer_pool_size=1Ginnodb_data_file_path=ibdata1:10M:autoextendinnodb_file_per_table=oninnodb_write_io_threads=4innodb_read_io_threads=4innodb_thread_concurrency=8innodb_purge_threads=1innodb_flush_log_at_trx_commit=1innodb_log_buffer_size=8Minnodb_log_file_size=512Minnodb_log_files_in_group=3innodb_max_dirty_pages_pct=90innodb_lock_wait_timeout=60max_connections=5000interactive_timeout=28800wait_timeout=28800sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONsymbolic-links=0######时间参数log_timestamps=SYSTEM[mysqldump]quickmax_allowed_pa??cket=32M[mysql]no-auto-rehashdefault-character-set=utf8mb4[myisamchk]key_buffer_size=64Msort_buffer_size=64Mread_buffer=8Mwrite_buffer=8M[mysqlhotcopy]interactive-timeout[mysqld_safe]log-error=/data_rmysql.mysql/logpid-file=/data/mysql/mysqld.pid注意:①以上配置仅供参考,请根据实际环境要求修改参数②query_cache_size该参数配置在MySQL5.7.20已经过时,MySQL8.0移除后被替换.2、权限设置cd/usr/local/mysqlchown-Rmysql:mysql.3。初始化数据库/usr/local/mysql/bin/mysqld--initialize-insecure--user=mysql--basedir=/usr/local/mysql--datadir=/data/mysql注:a.之前版本的mysql_install_db在mysql_basedir/script下,5.7放在mysql_install_db/bin目录下,已经废弃b。“--initialize”会生成随机密码(~/.mysql_secret),“--initialize-insecure”不会生成密码c.--datadir目标目录不能有数据文件##初始化完成提示:##开启SSL连接,安全性提高,但相对降低QPS如果安装了,还是影响性能,慎重选择!本文不启用它!/usr/local/mysql/bin/mysql_ssl_rsa_setup4.安装MySQL的man帮助文件、头文件和lib库cd/usr/local/mysql##ManualPagehelpfileecho"MANPATH/usr/local/mysql/man">>/etc/man.config##headerfileln-sv/usr/local/mysql/include/usr/include/mysql##lib库文件echo'/usr/local/mysql/lib'>/etc/ld.so.conf.d/mysql.conf##加载动态库文件ldconfig5.配置MySQL环境变量echo'######MySQL'>>/etc/profileecho'PATH=$PATH:/usr/local/mysql/bin'>>/etc/profilesource/etc/profile6.配置MySQL服务管理命令cd/usr/local/mysqlcsupport-files/mysql.server/etc/rc.d/init.d/mysqld7。启动数据库/etc/init.d/mysqldstart/usr/local/mysql/bin/mysql--version&&echo-e"\e[31mmysqlinstallisOK\e[0m"8.验证jemalloc优化MySQL生效lsof-n|grepjemalloc|grepmysqld5.服务管理启动:/etc/init.dd/mysqldstart关机:/etc/init.d/mysqldstop重启:/etc/init.d/mysqldrestart查看状态:/etc/init.d/mysqldstatus配置开机:echo"/etc/init.d/mysqldstart">>/etc/rc.local6.配置root账户密码##设置本地登录密码mysql-uroot-p//因为初始化数据的时候没有设置密码,可以按两次确认键进入数据库usemysql;updateusersetauthentication_string=password('youpassword')whereuser='root'andhost='localhost';FLUSHPRIVILEGES;##对于MySQL5.7.5或更早版本,使用以下命令设置密码updateusersetpassword=PASSWORD('youpassword')whereUser='根';***特别提醒一点:MySQL5.7.6及最新版数据库在user表中没有Password字段,而是在authentication_string字段中存放加密后的用户密码,密码复杂度高,需要字母和数字,特殊字符。##设置远程登录密码GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'youpassword'WITHGRANTOPTION;FLUSHPRIVILEGES;7.测试1、创建测试数据库mysql-uroot-p//输入上面步骤设置的密码登录数据库##创建测试库,指定字符集和排序规则CREATEDATABASEtestDEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;##查看显示数据库;2、创建普通用户并授权mysql-uroot-p//输入上面步骤设置的密码登录数据库##切换到mysql库usemysql;##创建用户CREATEUSER'test'@'%'IDENTIFIEDBY'123456';##授权GRANTselect,insert,update,delete,createontest.*to'test'@'%';##刷新权限FLUSHPRIVILEGES;##查看用户selectuser,hostfromuser;##查看测试用户权限showGRANTSfor'test'@'%';