青蛙学Linux—MySQL安装和初始化

1、安装MySQL

这里我们选择MySQL的源码包进行安装,MySQL版本5.7,安装路径为/usr/local/mysql,数据存储路径为/db/mysql,日志文件路径/usr/local/mysql/logs,运行MySQL的用户和组为mysql。

1.1、创建mysql用户

mysql用户用于运行MySQL,不能使用shell,为虚拟用户:

[root@localhost apps]# useradd -s /sbin/nologin mysql

创建数据存储目录并授权给mysql用户:

[root@localhost apps]# mkdir -p /db/mysql
[root@localhost apps]# chown -R mysql:mysql /db/mysql

1.2、下载MySQL

MySQL的源码包可以在MySQL的官网https://www.mysql.com下载。这里下载MySQL的开源社区版MySQL Community Edition。

MySQL Community Edition有几种产品,这里我们下载MySQL Community Server。在进入下载页面后做如下选择:

1

然后在过滤出的产品中下载带有Boost库的版本。因为从MySQL 5.7版本开始,安装MySQL必须有Boost库。

1.3、安装依赖环境

MySQL的编译安装依赖以下软件包,这里通过YUM安装这些软件包:

[root@localhost apps]# yum install make gcc-c++ cmake bison-devel ncurses-devel bison perl perl-devel

1.4、安装MySQL

从MySQL 5.5版本开始,使用cmake替代configure进行编译。进入解压后的MySQL源码目录,运行:

[root@localhost mysql-5.7.25]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  # MySQL安装路径
> -DMYSQL_DATADIR=/db/mysql \                # 数据库存储目录
> -DDEFAULT_CHARSET=all \                    # 扩展字符集支持
> -DDEFAULT_CHARSET=utf8 \                   # 定义字符集设置
> -DDEFAULT_COLLATION=utf8_general_ci \      # 字符集排序规则
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \         # 启用InnoDB引擎
> -DWITH_MYISAM_STORAGE_ENGINE=1 \           # 启用MyISAM引擎
> -DMYSQL_USER=mysql \                       # 运行MySQL的用户
> -DMYSQL_TCP_PORT=3306 \                    # MySQL端口
> -DWITH_BOOST=boost \                       # boost库路径
> -DENABLED_LOCAL_INFILE=1 \                 # 启用加载本地数据
> -DWITH_PARTITION_STORAGE_ENGINE=1 \        # 启用Partition分区
> -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \       # MySQL的socket文件
> -DWITH_EMBEDDED_SERVER=1 \                 # 开启嵌入式服务器
> -DWITH_SYSTEMD=1                           # 启用systemd支持

cmake执行完成无报错后,运行:

[root@localhost mysql-5.7.25]# make && make install

2、初始化和启动MySQL

2.1、初始化MySQL

MySQL的运行需要一个系统库,初始化MySQL的操作就是生成这个系统库。在MySQL 5.7之前的版本,初始化操作是通过MySQL源码目录下的scripts目录中名为mysql_install_db的初始化脚本进行的;而从MySQL 5.7版本开始,mysql_install_db脚本已经被废弃,需要使用以下命令进行初始化:

./mysqld --initialize-insecure|--initialize --user=运行MySQL的用户 --basedir=MySQL安装目录 --datadir=数据库存储目录
  • --initialize-insecure:在初始化时不生成管理员root用户的密码
  • --initialize:在初始化时生成一个随机的管理员root用户密码,密码将打印在屏幕上

2.2、检查MySQL配置文件

MySQL的配置文件名为my.cnf。MySQL在启动时会首先在/etc目录下查找my.cnf文件,如果找不到则会在$basedir(MySQL安装目录)目录下查找,如果还找不到则会在用户的家目录下查找my.cnf文件。

在启动MySQL之前,必须先确认是否已经存在/etc/my.cnf文件,如果存在则首先删除/etc/my.cnf,然后重新建立这个文件。否则MySQL读取老的/etc/my.cnf可能会造成启动失败。

基础的my.cnf文件非常简单,只需设置如下内容:

[mysqld]
datadir=/db/mysql                           # MySQL的数据存储路径
socket=/tmp/mysqld.sock                     # MySQL的socket文件
symbolic-links=0                            # 关闭表内符号链接支持
log-error=/usr/local/mysql/logs/mysqld.log  # MySQL日志文件

创建MySQL日志目录并授权给mysql用户:

[root@localhost mysql]# pwd
/usr/local/mysql
[root@localhost mysql]# mkdir logs
[root@localhost mysql]# chown -R  mysql:mysql logs

2.3、MySQL服务管理脚本

MySQL在编译安装的过程中会生成用于对MySQL服务进行管理的脚本,以使用户可以使用操作系统的服务管理命令对MySQL的服务进行管理。

init

在使用init机制的Linux系统上,MySQL的服务管理脚本位于以下目录:

MySQL安装目录/support-files/

文件名为mysql.server,只需将该文件拷贝到/etc/init.d目录下并重命名为mysqld,然后授予775的权限即可。之后就可以使用init的管理命令对MySQL服务进行管理了。

systemd

在cmake编译时使用参数-DWITH_SYSTEMD=1可生成名为mysqld.service的MySQL的Unit配置,该文件位于以下目录:

MySQL安装目录/usr/lib/systemd/system/

将该文件拷贝到/usr/lib/systemd/system下即可使用systemd来管理MySQL服务。

注意:在mysqld.service中定义了MySQL的PID文件mysqld.pid的路径,位于:

/var/run/mysqld

所以在启动MySQL之前必须先创建该目录,并授权给mysql用户。

3、首次登录MySQL

在进行完以上的初始化配置之后,就可以启动MySQL了。MySQL的管理员用户为root,首次登录MySQL需要使用该用户。

进入MySQL安装目录下的bin目录,运行:

[root@localhost bin]# ./mysql -u root -p

提示输入密码。如果在初始化时没有生成随机密码,则直接回车即可登录MySQL;如果初始化时生成了随机密码,MySQL会将随机密码打印在屏幕上,输入随机密码即可登录MySQL。

对于root空密码,为了安全建议为root设置密码;而使用随机密码,则必须更改密码,否则不论执行任何命令,总会显示以下信息:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

使用以下三条命令重置root用户的密码:

set password=password('new password');                # 设置新密码
alter user 'root'@'localhost' password expire never;  # 设置密码过期时间
flush privileges;                                     # 刷新MySQL,使更改马上生效

接下去就可以使用新密码登录MySQL了。

posted @ 2019-01-26 14:27  青蛙学Linux  阅读(4884)  评论(0编辑  收藏  举报