青蛙学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。在进入下载页面后做如下选择:
然后在过滤出的产品中下载带有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了。