天天看點

MySQL學習之安裝方式,初始化,以及相關驗證

作者:樸實清風29

安装及初始化

最好的安装方式就是不安装,直接初始化就能用,没错,这种方式就是下载二进制版本,解压后就能进行初始化,投入使用。其它的安装方式,无非2种,一是源码编译安装,二是使用安装包,Linux下使用yum之类系统安装工具。最麻烦的是源码编译安装了,这种方式往往可定制性非常灵活,可以选择需要的组件进行编译,本文介绍的是二进制包安装和编译方式安装。废话不多讲,先从简单的开始。

软件包下载

既然要使用进制安装MySQL,得先下载相应的安装包,那肯定是要从官网下载了,这是必须的,因为官网是权威的,正确性和可靠性都有保障(好像是废话)。

MySQL 社区版本 下载页面:https://downloads.mysql.com/archives/community/

下载二进制包时,在 operating system下拉列表选择:Linux-Generic ;在 OS Version 下拉列表中选择对应的glibc版本和平台架构(32位或64位)。

MySQL學習之安裝方式,初始化,以及相關驗證

下载源码包时,在 operating system下拉列表选择:Source Code ;在 OS Version 下拉列表中选择对应的glibc版本和平台架构(32位或64位)。

MySQL學習之安裝方式,初始化,以及相關驗證

在 OS Version 这个选择框里可能会出现不同的glibc版本,要怎么选择?那还要看linux操作系统中的glibc的版本是什么,一般情况是高版本兼容低版本。

查看系统glibc版本方法:下面是centos7.9 x64的输出。

ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.           

二进制包安装

二进制包安装官方文档:https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html

mysql依赖libaio这个库,需要先行安装

gt; yum search libaio # search for info
gt; yum install libaio # install library           

在rhel8或centos8等8版本还需要安装一个包,叫ncurses-compat-libs

gt; yum install ncurses-compat-libs           

安装方式如下:

  • 创建mysql用户组和用户,后面MySQL的运行就以mysql的用户来执行,注意此用户被设置为不能登录系统。
  • 解压MySQL文件包到一个指定目录,此目录作为mysql的工作目录。
  • 创建一个软链接 指向解压出来的文件夹。
  • 创建一个存放数据的目录,并配置文件夹的所属用户及组和设置目录权限为750。
  • 初始化数据库。
  • 拷贝启动脚本到init.d目录下,以便开机自动启动。
gt; groupadd mysql
gt; useradd -r -g mysql -s /bin/false mysql
gt; cd /usr/local
gt; tar xvf /path/to/mysql-VERSION-OS.tar.xz
gt; ln -s full-path-to-mysql-VERSION-OS mysql
gt; cd mysql
gt; mkdir mysql-files
gt; chown mysql:mysql mysql-files
gt; chmod 750 mysql-files
gt; bin/mysqld --initialize --user=mysql
gt; bin/mysql_ssl_rsa_setup
gt; bin/mysqld_safe --user=mysql &
# Next command is optional
gt; cp support-files/mysql.server /etc/init.d/mysql.server           

以上部骤暂且执行到第5行,后面的是在初始化数据库,在后面再介绍。

解压出的目录里包含了mysql所有的启动命令和相关文件,但是每次要执行mysql相关命令时都要写全路径,这有点不方便,我们希望在shell里直接就能运行而不需要打全路径,一个通常的做法是将mysql/bin这个目录加入环境变量PATH中。通常建议写一个shell脚本放到/etc/profile.d/目录下,要想立即生效,source一下这个脚本 ,或者重启系统也可以生效。

[root@localhost ~]# cat /etc/profile.d/mysql.sh 
#!/bin/bash
MYSQL_HOME=/root/soft/mysql57
PATH=$PATH:$MYSQL_HOME/bin
export PATH MYSQL_HOME
[root@localhost ~]# source /etc/profile.d/mysql.sh           

源码包安装

源码包安装官方文档:https://dev.mysql.com/doc/refman/8.0/en/installing-source-distribution.html
如果要想安装过程顺利,其实是有先决条件的:https://dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html

MySQL5.7 要求make版本在3.75或以上

MySQL8.0 cmake要求:

  • Linux: GCC 7.1 or Clang 5
  • macOS: XCode 10
  • Solaris: GCC 10
  • Windows: Visual Studio 2019 Update 4

ncurses

openssl openssl-devel

perl

如果安装的mysql是开发版本,还要求bison 2.1 或更高版本

总之,缺少什么就安装什么。

安装方式如下:

源码包的安装方式比二进制安装,多了如下3步:

  • mkdir bld;cd bld 这里创建这个文件夹的目的是存放编译后的目标文件。
  • cmake .. 这里的2个小点不能省略,因为cmake的入口文件在上一层目录中。
  • make 编译
  • make install 安装
# Preconfiguration setup
gt; groupadd mysql
gt; useradd -r -g mysql -s /bin/false mysql
# Beginning of source-build specific instructions
gt; tar zxvf mysql-VERSION.tar.gz
gt; cd mysql-VERSION
gt; mkdir bld
gt; cd bld
gt; cmake ..
gt; make
gt; make install
# End of source-build specific instructions
# Postinstallation setup
gt; cd /usr/local/mysql
gt; mkdir mysql-files
gt; chown mysql:mysql mysql-files
gt; chmod 750 mysql-files
gt; bin/mysqld --initialize --user=mysql
gt; bin/mysql_ssl_rsa_setup
gt; bin/mysqld_safe --user=mysql &
# Next command is optional
gt; cp support-files/mysql.server /etc/init.d/mysql.server           

默认情况下,源码安装时,mysql被安装到了这个目录:/usr/local/mysql,当然也可以加参数进行指定,都有哪些参数呢,这里简单列出一些,供参考:

参数名 解释说明
CMAKEBULDTYPE 用来指定编译的是RELEASE版本还是DEBUG版本,或者是RelWithDebInfo版本的
CMAKEINSTALLPREFIX 用来指安装路径,即安装到哪个目录
MYSQL_DATADIR 用来生成默认的数据库路径,即在没有指定启动参数--defaults-file时的默认数据库路径
OPTIMIZER_TRACE 用来指明是否打开优化器TRACE模块
WITHARCHIVESTORAGE_ENGINE 是否支持Archive存储引擎
WITHINNOBASESTORAGE_ENGINE 是否支持InnoDB存储引擎
WITHBLACKHOLESTORAGE_ENGINE 是否支持BLACKHOLE存储引擎
WITHEXAMPLESTORAGE_ENGINE 是否支持EXAMPLE存储引擎,示例引擎
WITHINNODBMEMCACHED 表示是否支持INNODB的MEMCACHED
WITHPARTITIONSTORAGE_ENGINE 表示是否支持partition存储引擎
WITH_SYSTEMD 启用systemd支持文件,即可以使用systemctl 来管理MySQL的启动、停止、重启

以上这些选项可以在CMAKE命令中通过在前面加上-D来指定相应的值,下面给出示例:

cmake .. -DCMAKE_INSTALL_PREFIX=/var/mysql \
-DDEFAULT_CHARSET=utf8mb4 \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_BOOST=.. \
-DWITH_SYSTEMD=ON           
关于更多的CMAKE选项,参考官方文档:https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html

默认参数情况下,不会产生systemd 的支持文件,这里我在安装的时候,其它所有选项保持默认,只加了一个-DWITH_SYSTEMD=ON这个参数,用来产生mysqld.service文件。

cmake .. -DWITH_BOOST=.. \
-DWITH_SYSTEMD=ON           

cmake执行完成后会看到如下提示:

-- Configuring done
-- Generating done
-- Build files have been written to: /root/soft/mysql-5.7.40/bld           

接下来执行 make,加上 -j 4 表示启动4个线程执行make,这样会快一些(根据内存大小,否则线程越多,占用内存越多,搞不好就把机器搞挂了,我在4G虚拟机内存下启10个线程就挂了),完成后如下提示:

[100%] Built target mysqld
[100%] Built target pfs_connect_attr-t
[root@localhost bld]#           

执行make install进行安装

-- Installing: /usr/local/mysql/share/aclocal/mysql.m4
-- Installing: /usr/local/mysql/support-files/mysql.server
[root@localhost bld]#           

在cmake的时候加了产生systemd文件的参数,看看有没有产生,可以看到确实产生了,mysqld.service的文件,后面就可以使用systemctl来管理服务端了,。

[root@localhost mysql]# find / -name mysq*.service
/root/soft/mysql-5.7.40/bld/scripts/mysqld.service
/root/soft/mysql-5.7.40/bld/scripts/[email protected]
/usr/local/mysql/usr/lib/systemd/system/mysqld.service
/usr/local/mysql/usr/lib/systemd/system/[email protected]           

有了mysqld.service的文件,还得把它放到合适的路径下,一般是/usr/lib/systemd/system/下,再执行systemctl daemon-reload 才可以使用。

MySQL的systemd管理具体详情参考官方文档:https://dev.mysql.com/doc/refman/8.0/en/using-systemd.html

初始化数据库

不管用什么方式安装的数据库,初始化过程都是一样的,一般是先创建一个数据目录用于存放数据,对这个目录配置所属用户和组及权限,初始化完成后,会在这个目录下生成相应的文件,以后所有数据都会存放在这个文件夹下。

官方的操作如下:

gt; mkdir mysql-files
gt; chown mysql:mysql mysql-files
gt; chmod 750 mysql-files
gt; bin/mysqld --initialize --user=mysql
gt; bin/mysql_ssl_rsa_setup
gt; bin/mysqld_safe --user=mysql &           
初始化官方文档:https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html

通常在初始化时会指定一个配置文件,叫my.cnf,位于安装目录support-files目录下,如果没有就手动创建,放在/etc/目录下即可。

[root@localhost mysql]# cat /etc/my.cnf |grep -v "#"
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
basedir=/usr/local/mysql #安装目录
datadir=/opt/mysql57/data #数据库目录
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
!includedir /etc/my.cnf.d
mysqld --defaults-file=/etc/my.cnf
--initialize --user=mysql           

初始成功后,会有数据库的初始密码返回:

2023-03-06T05:45:44.391782Z 0 [Warning] CA certificate ca.pem is self signed.
2023-03-06T05:45:44.412290Z 1 [Note] A temporary password is generated for root@localhost: gAaptc;vD2wh
[root@localhost ~]#           

验证(连接测试)

常用的mysql连接的2种方式:

  • 1 tcp/ip 支持本地连接和远程连接。
  • 2 unix socket 通常用于MySQL服务端和客户端部署在同一台主机上。
  • 注意:在my.cnf配置文件中,[client] 和 [mysqld]中的socket定义要相同才行。
[root@localhost ~]# mysql -hlocalhost -uroot -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.40-log
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like "cache";
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.           

第一次连接mysql后,其实不能执行任何命令,会提示要更改密码,改密码方式如下:

mysql> alter user user() identified by 'frank';
Query OK, 0 rows affected (0.00 sec)           

此时的MySQL服务器也只能从本机登录,原因是root用户的Host主机字段值为localhost。

繼續閱讀