MySQL官方的安装布局是:/usr/local/mysql{bin,docs,man,include,lib,share,support-files}
对于编译布尔选项,可以将值指定为1或ON启用该选项,0或OFF表示禁用该选项。许多选项配置可在服务器启动时覆盖编译时的默认值的。
1.前期准备:
卸载系统自带的mysql及配置文件和库,运行rpm -qa|grep -i mysq和rpm -qa|grep -i mariadb,使用rpm -e --nodes前两个名利筛选出来的包,再看看/etc/my.cnf文件是否存在,如果在也删掉;
新建无法登陆的mysql用户及组,运行groupadd mysql,useradd -r -s /sbin/nologin -g mysql mysql;
安装必要的软件包,运行yum -y install install gcc gcc-c++ cmake make ncurses libaio openssl perl
2.解压缩源码包:
先在/root目录下创建bld目录(该名称随便取),该目录是用来执行cmake命令的,单独出一个目录是为了保持源文件的干净;再创建/usr/local/src/mysql目录用来存放源码包解压后的文件,以备后续使用;
运行tar -zxvf mysql-boost-8.0.12.tar.gz -C /usr/local/src/mysql
3.关于boost的处理:
MySQL8的源码包有含boost和不含boost的;如果源码包不含boost时并且不单独安装boost时,那么在执行cmake时记得加上这些选项 -DDOWNLOAD_BOOST=ON -DDOWNLOAD_BOOST_TIMEOUT=1200 -DWITH_BOOST=/usr/local/boost
如果源码包是包含了boost的话,在执行cmake时也要指定boost的位置,boost一般在源码包解压后的文件下的boost目录里面;
这次使用含boost的源码安装,因为不含boost源码安装在下载boost时速度很慢即使把等待时间设置1200秒都可能会断线。
4.关于字符集和排序字符集:
服务器字符集。默认情况下,MySQL使用utf8mb4字符集。如果使用其它允许的字符集在mysql-srcfile/cmake/character_sets.cmake文件中列为值CHARSETS_AVAILABLE。
服务器排序规则。默认情况下,MySQL使用utf8mb4_0900_ai_ci。使用默认字符集及校对规则。
4.执行cmake:
centos7推荐使用systemd管理启动任务,所以要开启systemd的支持;
cd /root/bld
cmake /usr/local/src/mysql/mysql-8.0.12 \
-DBUILD_CONFIG=mysql_release \
-DWITH_SYSTEMD=ON \
-DWITH_BOOST=/usr/local/src/mysql/mysql-8.0.12/boost
5.再执行make,如果机器性能一般的话会执行很久,差不多执行了2个小时;再执行make install
6.初始化数据库
进入MySQL的基目录,运行./bin/mysqld --initialize-insecure --user=mysql这条命令不会生成root的初始密码,如果使用
--initialize
代替--initialize
-insecure的话,会生成root的初始密码,使用grep password /var/log/mysqld.log即可查看到;
bin目录下的mysqld还可以带参数--defaults-file=/etc/my.cnf,这个参数是指定服务器启动时的配置参数,有些可以覆盖编译时的取值;
mysqld会执行一下初始化序列:
- 检查数据(data)目录是否存在,如果不存在mysqld程序会创建它;如果数据目录不为空,则会报错,那样的话就要删掉data目录了(编译时默认是/usr/local/mysql/data,而且执行初始化时也没有指定my.cnf文件嘛,即使指定了my.cnf文件但是该文件没有写明这个配置的话那也是使用编译时的值或默认值);
- 在数据目录中,服务器创建
mysql
系统数据库及其表,包括授权表,服务器端帮助表和时区表。 - 服务器初始化管理表所需的系统表空间和相关的数据结构InnoDB。
- 服务器创建'root'@'localhost'超级用户账户和其它保留账户某些保留帐户已被锁定且客户端无法使用,但'root'@'localhost'仅供管理使用。
- 如果在基目录下的share目录存在fill_help_tables.sql并可用的话,会执行该文件填充服务器端帮助表。
- 如果在执行初始化时带了--init-file并且有效的话,会执行该参数后面的文件sql,这个文件主要是用于自定义引导序列(目前还不懂),当服务器在引导模式下运行时,某些功能不可用,这限制了文件中允许的语句。这些包括与帐户管理(例如
CREATE USER
或GRANT
),复制和全局事务标识符相关的语句。
把MySQL的基目录赋给mysql用户及组:chown -R mysql:mysql /usr/local/mysql;
7.配置自动启动
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable mysqld.service
8.设置root本地密码
先启动mysql,systemctl start mysqld.service;登陆后再执行ALTER USER 'root'@'localhost' IDENTIFIED BY '
new_password'
;
创建新用户create user "username"@"host" identified by "password";
赋权grant privileges on databasename.tablename to 'username'@'host' IDENTIFIED BY 'PASSWORD';