首页 > 数据库 > MySQL > 正文

如何用源码编译安装MySQL8.0.20

2024-07-24 12:36:16
字体:
来源:转载
供稿:网友
  这篇文章主要讲解了如何用源码编译安装MySQL8.0.20,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
 
  1 概述
 
  本文章主要讲述了如何从源码编译安装MySQL社区版8.0.20,首先会介绍一些编译安装的相关知识,然后开始编译安装
 
  2 源码编译安装的相关知识
 
  2.1 make与configure
 
  make是一个编译的命令,会在当前的目录下寻找Makefile这个文件,Makefile文件记录了源代码如何编译的详细信息。而configure是由软件开发商编写的一个检测程序检测用户的开发环境,检测完毕后生成Makefile文件。通常,configure会检测如下内容:
 
  是否具有合适的编译器
  是否具有所需函数库以及其他依赖
  是否兼容本系统
  是否存在内核头文件
  2.2 Tarball文件
 
  Tarball文件其实就是将源代码以tar打后压缩的文件。通常使用gzip进行压缩,一般扩展名为.tar.gz或.tgz,不过由于bzip2以及xz等技术压缩效果比gzip好,因此文件名也会变成扩展名也会变成.tar.bz2或.tar.xz之类的。通常一个Tarball文件有:
 
  源码
  检测文件(configure/config)
  说明(README/INSTALL)
  2.3 源码编译安装相关组件
 
  2.3.1 编译器
 
  需要有编译器才能进行编译操作,通常使用的是gcc。
 
  2.3.2 make+autoconfig
 
  以Tarball形式发布的软件,为了简化编译流程,通常需要make来根据目标文件文件的依赖性进行编译,但是由于make需要Makefile,因此需要autoconfig生成Makefile。
 
  2.3.3 函数库
 
  需要内核提供的库以及相关的include文件。
 
  2.4 静态库与动态库
 
  函数库分为动态库与静态库两种类型,绝大部分放在/lib与/lib64中。
 
  2.4.1 静态库
 
  扩展名为.a,编译时会直接整合到执行程序中,所以利用静态库生成的文件会比较大一些,编译后的可执行文件可以直接运行,无需依赖外部函数库。另外升级难度较大,因为是直接整合进程序中,升级了静态库的话需要重新编译。
 
  2.4.2 动态库
 
  扩展名为.so,在编译时不像静态库一样,动态库在程序中只有一个指针,当可执行程序需要用到函数库的功能时,才会读取函数库来使用,生成的可执行文件会比较小一点,但是不能独立执行编译出来的程序。另外升级比较方便,不需要重新编译,因为执行文件会直接指向新的函数库文件。
 
  2.5 编译安装的一般步骤
 
  (1)获取源码:一般使用wget或curl或从浏览器下载。
  (2)查看帮助文件:解压后查看INSTALL或README等文件相关内容
  (3)安装依赖:根据官网文档或上一步中得到的信息安装依赖
  (4)生成Makefile:一般使用configure/config进行配置,检测操作环境,指定安装位置,开启/关闭对应的功能,指定相关库位置等,确定依赖关系等,一般需要使用–help获取选项帮助,指定对应选项后配置并生成Makefile
  (5)编译:实际编译步骤,一个简单的make命令,实际包含了头文件预编译,预处理,编译与连接步骤
  (6)安装:make install,这一步实际进行安装与操作系统连接两个步骤
  注意,以上步骤都是有顺序的,而且前一个步骤执行失败则后一个步骤也不能执行,也就是说需要前一个步骤执行成功才能进行下一步的操作。完成以上六步就能编译安装了,一般需要进行一些后续处理,比如,添加可执行文件路径到PATH,添加头文件与库文件到/usr/include与/etc/ld.so.conf.d中,添加联机帮助文件到/etc/man_db.conf中。
 
  2.6 编译安装前的心理准备
 
  这里是最后的提示了,未安装之前还可以ctrl+w关闭本页面,避免无数的痛苦。
  编译安装最常见的问题就是版本与依赖的问题,版本问题容易处理,可以通过包管理器进行升级或者手动升级,至于依赖问题,包管理器安装的话很容易,编译安装的话会非常头疼,因为不知道某个依赖下面还需要安装多少个依赖。
  所以,需要准备充足的时间,还有充分的耐心,去解决无数的问题,才能成功进行编译安装MySQL与Workbench这种大型软件。
  不废话了,开始吧。
 
  3 安装MySQL
 
  3.1 安装依赖
 
  MySQL所需依赖如下:
 
  cmake
  make(推荐3.75以上)
  编译器(GCC5.3+或Clang4.0+或XCode9+或Developer Studio12.6+或Visual Studio2017)
  SSL库(默认使用系统的OpenSSL)
  Boost C++库,需要用来构建但不需要使用,无需安装,源码即可
  ncurses库
  bison2.1+
  git
  3.2 包管理器安装
 
  笔者的Debian系,使用apt即可:
 
  sudo apt-get install -y bison
   git hostname
  libncurses-dev
  libssl-dev make
  openssl pkg-config
  doxygen cmake make
  RedHat8.x:
 
  sudo yum install -y bison bzip2 git hostname ncurses-devel
  openssl openssl-devel pkgconfig tar wget zlib-devel
  doxygen diffutils rpcgen make libtirpc-devel cmake gcc
  RedHat7.x:
 
  sudo yum install -y bison bzip2 git hostname ncurses-devel
  openssl openssl-devel
  pkgconfig tar wget zlib-devel
  doxygen cmake gcc
  其他自行搜索。
 
  3.2 编译安装
 
  若不想用包管理器安装,可以使用编译安装的方式。
  欢迎来折腾。
 
  3.2.1 安装cmake
 
  tar -zxvf cmake-3.17.2.tar.gz
  cd cmake-3.17.2
  ./bootstrap --prefix=/usr/local/cmake
  make clean
  make -j 6 #6为CPU核数,自定义修改,若失败请使用make
  make test
  sudo make install
  3.2.2 安装make
 
  没有编译器的情况下无法编译安装,使用软件包安装即可,笔者的Debian系,直接使用apt:
 
  sudo apt install make
  3.2.3 安装gcc
 
  tar -xvf gcc-9.3.0.tar.xz
  cd gcc-9.3.0
  ./contrib/download_prerequisites
  mkdir build
  cd build
  ../configure --prefix=/usr/local/gcc -enable-checking=release -disable-multilib
  make clean
  make -j 6
  make test
  sudo make install
  sudo ln -sv /usr/local/gcc/include /usr/include/gcc
  #/etc/ld.so.conf.d/gcc.conf加入以下内容
  /usr/local/gcc/lib
  /usr/local/gcc/lib64
  3.2.4 安装openssl
 
  tar -zxvf openssl-1.1.1g.tar.gz
  cd openssl-1.1.1g
  ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl/ssl
  #prefix为安装位置,默认/usr/local
  #openssldir为配置文件位置,同时存放证书与密钥对
  make clean
  make -j 6
  make test
  sudo make install
  sudo ln -sv /usr/local/openssl/include /usr/include/openssl
  #/etc/ld.so.conf.d/openssl.conf加上以下内容
  /usr/local/openssl/lib
  3.2.5 下载boost
 
  官网戳这里。
  需要的版本为1.70.0。目前最新的版本为1.73.0,理论上来说更新的版本应该可以,这里下载的是1.70.0。如果不手动下载boost库的话可以在使用cmake生成Makefile时设置DDOWNLOAD_BOOST为1进行下载。
 
  下载后解压既可。
 
  tar -xvf boost_1_70_0.tar.bz2
  3.2.6 安装ncurses
 
  tar -zxvf ncurses-6.2.tar.gz
  cd ncurses-6.2
  ./configure --prefix=/usr/local/ncurses
  make -j 6
  sudo make install
 
  sudo ln -sv /usr/local/ncurses/include /usr/include/ncurses
  #/etc/ld.so.conf.d/ncurses.conf加入
  /usr/local/ncurses/lib
  3.2.7 安装bison
 
  tar -xvf bison-3.4.tar.xz
  cd bison-3.4
  ./configure --prefix=/usr/local/bison
  make -j 6
  sudo make install
  #/etc/ld.so.conf.d/bison.conf加入
  /usr/local/bison/lib
  3.2.8 安装git
 
  tar -xvf git-2.26.2.tar.xz
  cd git-2.26.2
  ./configure --prefix=/usr/local/git /
  --with-openssl=/usr/local/openssl /
  --with-libpcre2=/usr/local/pcre2 /
  --with-curl=/usr/local/curl /
  --with-expat=/usr/local/expat /
  --with-iconv=/usr/local/iconv /
  --with-editor=/usr/bin/vim /
  --with-zlib=/usr/local/zlib /
  --with-tcltk=/usr/local/tcl
  make all doc info
  sudo make install install-doc install-html install-info
  3.2.9 后续处理
 
  修改PATH:
 
  #在~/.bash_profile 或 ~/.bashrc加入
  export PATH=$PATH:/
  /usr/local/cmake/bin:/
  /usr/local/gcc/bin:/
  /usr/local/openssl/bin:/
  /usr/local/bison/bin:/
  /usr/local/ncurses/bin:/
  /usr/local/git/bin:/
  使动态库生效:
 
  ldconfig
  权限不足请加sudo。
 
  3.3 下载MySQL社区版
 
  官网这里。
  
  这里不知道第一个与第二个有什么区别,因为笔者两个都试过都能编译安装成功。虽然上面写着第二个带Boost头,但是貌似没什么用。这里用的是第一个。
  校验(可选):
 
  md5sum mysql-boost-8.0.20.tar.gz
  如何用源码编译安装MySQL8.0.20
 
  3.4 生成Makefile
 
  sudo cmake .. /
  -DDEFAULT_CHARSET=utf8mb4 /
  -DDEFAULT_COLLATION=utf8mb4_unicode_ci / #
  -DENABLED_LOCAL_INFILE=ON /
  -DWITH_SSL=system /
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/server /
  -DMYSQL_DATADIR=/usr/local/mysql/data /
  -DMYSQL_TCP_PORT=3306 /
  -DDOWNLOAD_BOOST=0 /
  -DWITH_BOOST=~/Desktop/boost
  DDEFAULT_CHARSET:指定默认字符集为utf8mb4,因为历史遗留问题,MySQL中的utf8不是真正的utf8,而是阉割版的,最长只有三个字节,当遇到四个字节的utf8编码时,会导致存储异常。从5.5.3开始,使用utf8mb4实现完整的utf8。
  DDEFAULT_COLLATION:排序规则,默认为utf8mb4_0900_ai_ci,属于utf8mb4_unicode_ci的一种。0900指的是Unicode校对算法版本,ai是指口音不敏感(as表示敏感),ci指不区分大小写(cs表示区分)。utf8mb4_unicode_ci表示基于标准的的Unicode来排序和比较,能够在各种语言之间精确排序,而utf8mb4_general_ci遇到某些特殊的字符集时排序结果可能不一致,准确性较差,但是性能较好,比较和排序时候更快。
  DENABLED_LOCAL_INFILE表示能否使用load data命令。
  DWITH_SSL表示使用系统的SSL库,若不使用系统的请自定义路径。
  DCMAKE_INSTALL_PREFIX:MySQL安装目录。
  DMYSQL_DATADIR:MySQL数据目录,初始时为空。
  DMYSQL_TCP_PORT:端口,默认3306。
  DDOWNLOAD_BOOST:取值0或1,是否下载Boost库。
  DWITH_BOOST:若不下载Boost库的话,是本地Boost库的位置,若下载Boost表示下载位置。
  其他更多参数请使用
 
  sudo cmake .. -LH
  查看。
 
  3.5 编译与安装
 
  sudo make
  或
 
  sudo make -j n
  笔者试过了make -j 6,失败,无奈换成了make。
  make的速度和make -j还是很大差距的。
  编译好之后,建议测试一下:
 
  make test
  然后安装:
 
  sudo make install
  3.6 后续配置
 
  3.6.1 用户组与用户
 
  新建用户组与用户,同时修改用户数据目录权限:
 
  sudo groupadd mysql
  sudo useradd -r -g mysql -s /bin/false mysql
  sudo chown mysql:mysql /usr/local/mysql/data
  sudo chmod 750 /usr/local/mysql/data
  数据目录根据需要修改,若后面出现不可写错误请把权限改为777。
 
  3.6.2 配置文件
 
  配置文件为my.cnf,可以放在
 
  /etc/
  /etc/mysql/
  安装目录/etc/
  ~/
  下,读取顺序从上到下。笔者安装后默认在/etc/mysql/my.cnf,这个是全局配置,~/.my.cnf是用户特定配置,这里直接修改/etc/mysql/my.cnf:
 
  [client-server]
 
  # Import all .cnf files from configuration directory
  !includedir /etc/mysql/conf.d/
  !includedir /etc/mysql/mariadb.conf.d/
 
  [mysqld]
  port=3306
  basedir=/usr/local/mysql/server
  datadir=/usr/local/mysql/data
  character-set-server=utf8mb4
  [mysql]
  default-character-set=utf8mb4
  [client]
  port=3306
  default-character-set=utf8mb4
  其中[mysqld]下面是新添加的字段,数据目录自行修改。
  建议字符集改为utf8mb4,因为utf8在MySQL中指的是utf8mb3,支持的utf8编码最大字符长度为3字节,如果遇到4字节的宽字符就会插入异常。三字节的utf8最大能编码的Unicode字符为0xffffff,也就是基本多文种平面,Emoji和很多不常用的汉字都不能存储。而utf8mb4是5.5.3之后才支持的,为了兼容性考虑应该统一使用utf8mb4。
 
  3.7 初始化
 
  修改环境变量:
 
  #.bashrc或.bash_profile加上
  export PATH=$PATH:/usr/local/mysql/server/bin
  使用
 
  mysqld --initialize --user=mysql
  或
 
  mysqld --initialize-insecure --user=mysql
  然后开启ssl与rsa支持(可选):
 
  mysql_ssl_rsa_setup
  最后开启服务:
 
  mysqld_safe --user=mysql &
  3.8 修改密码
 
  使用root登录,如果使用insecure初始化:
 
  mysql -u --skip-password
  使用initialize初始化:
 
  mysql -u root -p
  输入初始化出现的密码即可。
  然后修改密码:
 
  alter user root@localhost identified by 'xxx';
  3.9 测试
 
  使用自带的mysqlshow与mysqladmin:
 
  mysqladmin -u root -p versionmysqlshow -u root -p
 
  3.10 收尾工作
 
  3.10.1 别名
 
  alias md='mysqld -u mysql &'
  这样输入md就可以启动MySQL服务了。
 
  3.10.2 安装Mycli
 
  Mycli是一个MySQL命令行客户端工具,具有自动补全和语法高亮的功能。
  使用pip安装即可,python2请使用
 
  pip install mycli
  python3请使用
 
  pip3 install mycli
  找不到pip请安装:
 
  sudo apt install python-pip#python2
  sudo apt install python3-pip
  然后使用mycli进入数据库:
 
  mycli -u root
  愉快地使用补全吧!

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表