centos7 编译安装mysql
mysql5.7版本和8版本的编译略有不同,所以这里分开讲。
源码编译、安装MySQL5.7
Mysql5.7版本更新后有很多变化,最主要的变化是安装MySQL必须要有BOOST库,不过MySQL的官网源码包也提供了带BOOST库的源码和不带BOOST库的源码两种.
下载源码包
官网
点击downloads
选择社区版
https://dev.mysql.com/downloads/
选择服务器
选择历史版本
可以直接选择这个地址下载
https://downloads.mysql.com/archives/community/
安装依赖包
在开始安装MySQL之前,需要安装一些MySQL依赖的库文件包,为方便起见,这些依赖包我们通过yum方式进行安装,操作过程如下:
yum -y install make gcc-c++ cmake bison-devel ncurses-devel bison perl perl-devel perl perl-devel openssl openssl-devel
解压并创建mysql组和用户
可以通过MySQL官网去下载MySQL源码包,这里我们下载的版本是mysql-boost-5.7.36.tar.gz,下载完成后,传到需要安装的服务器上
进行解压,操作如下:
tar xvf mysql-boost-5.7.37.tar.gz -C /data
MySQL数据库需要以一个普通用户去执行一些操作,因而还需要创建一个普通用户和组,操作如下:
useradd -r -s /bin/false mysql
开始编译mysql
从MySQL5.5之后,MySQL的安装就开始使用cmake来代替传统的configure了
下面进入编译mysql环节,操作过程如下:
$ cd /data/mysql-5.7.37
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定安装目录
-DMYSQL_DATADIR=/data/mysql \ #指定数据目录
-DDEFAULT_CHARSETS=all \ #指定安装的字符集
-DDEFAULT_CHARSET=utf8 \ #指定默认字符集
-DDEFAULT_COLLATION=utf8_general_ci \ #指定默认排序规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #对存储引擎的选择 支持innob
-DWITH_MYISAM_STORAGE_ENGINE=1 \ #支持myisam引擎
-DMYSQL_USER=mysql \ #指定运行数据库的用户
-DMYSQL_TCP_PORT=3306 \ #指定端口
-DWITH_BOOST=boost \ #指定boost
-DENABLED_LOCAL_INFILE=1 \ #允许本地导入数据
-DWITH_PARTITION_STORAGE_ENGINE=1 \ #支持数据库分区
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \ #指定socket文件存放地址
-DWITH_EMBEDDED_SERVER=1
#安装
$ make && make install
初始化数据库
先给mysql用户数据目录的权限
$ cd /data
$ chown -R mysql:mysql mysql
$ ll mysql
drwxr-xr-x 2 mysql mysql 6 4月 25 09:05 mysql
MySQL安装完成后,接下来要做的就是初始化系统库(就是mysql数据库)
在mysql5.7之前的版本中,初始化脚本位于MySQL主程序安装目录下的scripts目录下,名为mysql_install_db
而在mysql5.7.20版本中,此脚本已经废弃,需要通过如下命令完成数据库初始化:
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
- --initialize-insecure:表示初始化时不生成mysql管理员用户root的密码。
- --initialize:表示初始化时生成一个随机密码,此密码默认会显示在mysql的日志文件(默认是/var/log/mysqld.log)中
$ /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
2022-04-25T01:57:44.924287Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2022-04-25T01:57:45.130629Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-04-25T01:57:45.169808Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-04-25T01:57:45.241251Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 198cc1c8-c43b-11ec-b73e-000c29f242e7.
2022-04-25T01:57:45.241798Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-04-25T01:57:45.602719Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-04-25T01:57:45.602736Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2022-04-25T01:57:45.603222Z 0 [Warning] CA certificate ca.pem is self signed.
2022-04-25T01:57:45.686448Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
#最后一句表明给root@localhost设置了空密码
设置mysql配置文件my.cnf
MySQL的配置文件名为my.cnf,在启动MySQL服务的时候
启动程序默认会首先查找/etc/my.cnf文件
如果找不到会继续搜索"\(basedir/my.cnf"文件,其中`\)basedir`是MySQL主程序的安装目录
如果还是找不到,最后还会搜索~/.my.cnf
文件。
因此,在启动MySQL前需要确认,是否已经存在/etc/my.cnf文件
如果存在,要先删除老的/etc/my.cnf文件,然后用新的my.cnf文件启动MySQL,很多MySQL启动失败,都是因为这个原因导致的。
#查看时间,发现是非常早的时间,这个就是系统自带的mariadb的配置文件,需要删除文件,重新写
$ ll /etc/my.cnf
-rw-r--r--. 1 root root 570 9月 30 2020 /etc/my.cnf
$ rm -rf /etc/my.cnf
$ vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/tmp/mysqld.sock
symbolic-links=0
log-error=/var/log/mysqld.log
配置mysql启动脚本
将脚本创建软连接存放在/etc/init.d目录下,方便之后用servic管理
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
创建客户端快捷方式
ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
启动服务
/etc/init.d/mysqld start
#脚本的可用命令
$ /etc/init.d/mysqld --help
Usage: mysqld {start|stop|restart|reload|force-reload|status} [ MySQL server options ]
#启动后可以运行安全脚本
$ /usr/local/mysql/bin/mysql_secure_installation
查看进程
$ ps -ef | grep mysql
root 26477 1 0 10:31 pts/1 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/Centos7.9-0.5.pid
mysql 26619 26477 0 10:31 pts/1 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysq --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/data/mysql/Centos7.9-0.5.pid --socket=/tmp/mysqld.sock
root 26696 1488 0 10:36 pts/1 00:00:00 grep --color=auto mysql
如果在初始化MySQL的时候设置了随机密码的话,虽然可以通过这个密码登录到数据库,但是,不论运行任何命令,总会提示如下信息:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
这个提示是让用户必须重置密码才能执行SQL操作,在MySQL命令行执行如下三个命令即可:
mysql> SET PASSWORD = PASSWORD('your new password');/*设置密码*/
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;/* 设置永不过期 */
mysql> flush privileges;/*刷新权限*/
注册开机自启
先要保证已经将服务脚本或者脚本的快捷方式放到/etc/init.d中
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
注册开机自启
$ chkconfig --add mysqld
$ chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
mysqld 0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
$ chkconfig mysqld off
$ chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
mysqld 0:关 1:关 2:关 3:关 4:关 5:关 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开
登录
由于之前初始化设置的是空密码
所以以下两种方式都可以登录
$ mysql
$ mysql -uroot -hlocalhost -p
登录进去后
grant all privileges on *.* to 'root'@'%' identified by '111111';
执行上面的一句,就可以给别的主机连数据库了
源码编译、安装MySQL8
https://downloads.mysql.com/archives/community/
#安装依赖
yum -y install make gcc gcc-c++ ncurses ncurses-devel bison libtirpc-devel cmake3 bison-devel bison perl perl-devel openssl openssl-devel
#安装rpcsvc-proto
tar xf rpcsvc-proto-1.4.3.tar.xz
cd rpcsvc-proto-1.4.3/
./configure
make -j 2 && make install
#新建用户
useradd -r -s /bin/false mysql
mkdir /data/mysql
chown mysql.mysql /data/mysql
#升级为10.2.1版本
#安装第三方scl源仓库
yum -y install centos-release-scl
#安装gcc 10.2.1 的版本
yum install devtoolset-10-gcc devtoolset-10-gcc-c++ devtoolset-10-binutils -y
#激活gcc 10.2.1
scl enable devtoolset-10 bash
#编译安装mysql
tar xf mysql-boost-8.0.28.tar.gz
cd mysql-8.0.28
cmake3 . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_UNIX_ADDR=/data/mysql/mysqld.sock \
-DEXTRA_CHARSETS=all \
-DMYSQL_USER=mysql \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=1 \
-DMYSQL_TCP_PORT=3306 \
-DWITH_DEBUG=0 \
-DDOWNLOAD_BOOST=0 \
-DFORCE_INSOURCE_BUILD=1 \
-DWITH_BOOST=boost
make -j 12 && make install
#新建快捷方式
ln -s /usr/local/mysql/bin/* /usr/local/bin/
#新建日志文件夹
mkdir -p /usr/local/mysql/logs/
#新建配置文件
rm -rf /etc/my.cnf
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
innodb_log_file_size=1024M
default-authentication-plugin=mysql_native_password
character-set-server=utf8
collation-server=utf8_bin
[client]
port=3306
default-character-set=utf8
socket=/data/mysql/mysql.sock
#修改根目录权限
chown -R mysql:mysql /usr/local/mysql/
#初始化
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
#复制服务管理脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#添加服务
chkconfig --add mysqld
#启动服务
service mysqld start
#访问数据库
mysql
#修改root密码
mysql> alter user "root"@"localhost" identified by "111111";
mysql> flush privileges;
#新建用户
mysql> create user 'root'@'%' identified by '111111';
mysql> grant all privileges on *.* to "root"@'%';
mysql> flush privileges;
如果编译过程中出现下面的问题,可以通过扩展swap解决,或者接着再编译也行
解决方案:
#获取要增加的2G的SWAP文件块
dd if=/dev/zero of=/swapfile bs=1k count=2048000
#创建SWAP文件
mkswap /swapfile
#激活SWAP文件
swapon /swapfile
#查看SWAP信息是否正确
swapon -s
#添加到fstab文件中让系统引导时自动启动
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
swapfile文件的路径在/var/下,编译完后, 如果不想要交换分区了, 可以删除。
删除交换分区:
swapoff /swapfile
rm -rf /swapfile
至此,问题解决。
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/16991009.html