源码安装mysql
1、服务器配置
Linux版本 | Mysql 版本 |
---|---|
Centos 7 | mysql5.6.28 |
准备工作
检查环境是否是干净的,没有安装过mysql,如果有要卸载干净,还有要注意的一点是centos7系统默认携带mariadb的包,这个也是要卸载的
## 检查是否有mariadb的安装包
root@17:45:16~ # rpm -qa | grep -i mysql
root@17:54:07~ # rpm -qa | grep -i mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
## 卸载上面查找到的mariadb的安装包
root@17:54:14~ # rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64
错误:依赖检测失败:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-7.el7.x86_64 需要
libmysqlclient.so.18(libmysqlclient_18)(64bit) 被 (已安裝) postfix-2:2.10.1-7.el7.x86_64 需要
## 上面卸载失败 我们可以尝试下面的命令
root@17:55:42~ # yum -y remove mariadb-libs-5.5.60-1.el7_5.x86_64
#可以再一次使用检查命令是否还有mysql或者mariadb的包
##环境准备 检查是否有boost的依赖 mysql的默认包
rpm -qa | grep boost
rpm -qa | grep mysql
## 如果存在则删除 使用yum的卸载方式 也会将依赖都卸载安静
yum -y remove boost-*
yum -y remove mysql
## 创建MySQL的用户和用户组
groupadd mysql
usradd -r -g mysql mysql (可以使用id mysql 查看)
## 参数说明
-r 指定用户为系统该用户
-g 指定用户的所属组
2 、安装
## 安装依赖工具
yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio
yum -y install libaio libaio-devel
yum -y install perl-Data-Dumper
yum -y install net-tools
## 创建存放MySQL的目录
mkdir -p /usr/local/mysql
## 下载MySQL5.6的源码包 这个下载比较慢
cd /usr/local/mysql/
wget http://wget dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.28.tar.gz
##这里我提供一个地址
https://www.jianguoyun.com/p/DSVCeAMQ2d6kCBjAwa0D
## 检查一下mysql文件的MD5值,查看是否是官方下载的原版本
md5sum mysql-5.6.28.tar.gz
4bc8fde6d04fb7104df1ba8a4025b156 mysql-5.6.28.tar.gz
## 开始编译安装
cd /usr/local/mysql
tar -zxf mysql-5.6.28.tar.gz ##解压缩包
cd mysql-5.6.28
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql\
-DMYSQL_DATADIR=/usr/local/mysql/data\
-DSYSCONFDIR=/etc\
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_MEMORY_STORAGE_ENGINE=1\
-DWITH_READLINE=1\
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock\
-DMYSQL_TCP_PORT=3306\
-DENABLED_LOCAL_INFILE=1\
-DWITH_PARTITION_STORAGE_ENGINE=1\
-DEXTRA_CHARSETS=all\
-DDEFAULT_CHARSET=utf8\
-DDEFAULT_COLLATION=utf8_general_ci
echo $? ## 执行这条命令查看是否执行成功
0
make && make install ## 时间可能会很长 耐性等待
## 安装成功查看 ll /usr/local/mysql/ 如下显示是安装成功的
root@18:06:18/usr/local/mysql # ll
总用量 160
drwxr-xr-x. 2 mysql mysql 4096 7月 20 17:50 bin
-rw-r--r--. 1 mysql mysql 17987 7月 20 17:32 COPYING
drwxr-xr-x. 5 mysql mysql 110 7月 20 17:52 data
drwxr-xr-x. 2 mysql mysql 55 7月 20 17:50 docs
drwxr-xr-x. 3 mysql mysql 4096 7月 20 17:50 include
-rw-r--r--. 1 mysql mysql 105684 7月 20 17:32 INSTALL-BINARY
drwxr-xr-x. 3 mysql mysql 4096 7月 20 17:50 lib
drwxr-xr-x. 4 mysql mysql 30 7月 20 17:50 man
-rw-r--r--. 1 root root 943 7月 20 17:52 my.cnf
drwxr-xr-x. 35 mysql mysql 4096 7月 20 17:50 mysql-5.6.28
drwxr-xr-x. 10 mysql mysql 4096 7月 20 17:50 mysql-test
-rw-r--r--. 1 mysql mysql 2496 7月 20 17:32 README
drwxr-xr-x. 2 mysql mysql 30 7月 20 17:50 scripts
drwxr-xr-x. 28 mysql mysql 4096 7月 20 17:50 share
drwxr-xr-x. 4 mysql mysql 4096 7月 20 17:50 sql-bench
drwxr-xr-x. 2 mysql mysql 136 7月 20 17:50 support-files
##如果没有安装成功,可以把/usr/local/mysql 删除,重新上传安装包,再编译安装一次
## 查看是否有mysql账户
less /etc/passwd /etc/group | grep mysql
## 如果没有则创建相应的用户以及用户组
groupadd mysql
usradd -r -g mysql mysql
## 参数说明
-r 指定用户为系统该用户
-g 指定用户的所属组
## 修改权限
chown -R mysql:mysql /usr/lcoal/mysql
## 如果这一步没有错误的话,我们的数据库是已经安装完毕的
编译命令的解释
命令 | 参数 | 解释 |
---|---|---|
DCMAKE_INSTALL_PREFIX | /usr/local/mysql | 安装目录 |
DMYSQL_DATADIR | /usr/local/mysql/data | 数据库位置 |
DSYSCONFDIR | /etc | 配置文件位置 |
DWITH_MYISAM_STORAGE_ENGINE | 1 | 安装myisam存储引擎 |
DWITH_INNOBASE_STORAGE_ENGINE | 1 | 安装innodb存储引擎 |
DWITH_MEMORY_STORAGE_ENGINE | 1 | 安装memory存储引擎 |
DWITH_READLINE | 1 | 快捷键功能 |
DMYSQL_UNIX_ADDR | /var/lib/mysql/mysql.sock | Unix socket 文件路径 |
DMYSQL_TCP_PORT | 3306 | MySQL监听端口 |
DENABLED_LOCAL_INFILE | 1 | 许从本地导入数据 |
DWITH_PARTITION_STORAGE_ENGINE | 1 | 安装数据库分区 |
DEXTRA_CHARSETS | all | 安装所有扩展字符集 |
DDEFAULT_CHARSET | utf8 | 使用utf8字符 |
DDEFAULT_COLLATION | utf8_general_ci | 校验字符 |
3、修改配置
## 配置mysql的永久环境变量
vim /etc/profile
## 添加以下内容
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin
export PATH
## 使添加的环境变量永久生效
source /etc/profile
##进入安装mysql的路径,执行初始化的配置脚本,创建系统自带的数据库和表
cd /usr/local/mysql/mysq-5.6.28
./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
## 可能会报一个-bash: ./scripts/mysql_install_db: 权限不够
chmod +x ./scripts/mysql_install_db
## 还是在当前目录下 /usr/local/mysql/mysql-5.6.28 执行上一条目录
./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
echo $? ## 查看是否执行成功
0
注意:
在启动MySQL服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,这是新版MySQL的配置文件的默认位置!
注意:在CentOS 7版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。
在使用"yum update"更新系统后,需要检查下/etc目录下是否会多出一个my.cnf,如果多出,将它重命名成别的。否则,MySQL将使用这个配置文件启动,可能造成无法正常启动等问题。
## 重命名
mv my.cnf my.cnf.back
4、启动MySQL服务
## 添加服务,复制服务脚本到init.d目录下,并设置开机自启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
## mysql 开机自启动
chkconfig mysql on
## 启动、关闭、重启命令
systemctl start mysql ##启动
systemctl stop mysql ##关闭
systemctl restart mysql ##重启
## 可以查看端口 如下所示 启动成功
ss -ntlp | grep 3306
LISTEN 0 80 :::3306 :::* users:(("mysqld",pid=58649,fd=10))
5、设置密码
## 默认是没有密码的
root@18:28:52~ # mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.28 Source distribution
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
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>
## 设置密码
> set password for 'root'@'localhost' = PASSWORD('123456');
## 再一次登录的时候就要输入密码
root@18:33:02~ # mysql -uroot -p
Enter password: 123456 ## 在这里输入密码就ok了
6、忘记密码
## 首先关闭 mysql的服务
systemctl stop mysql
## 添加一些内容
vim /usr/local/mysql/my.cnf
skip-grant-tables
## 开启mysql服务
systemctl start mysql
## 发现不需要输入密码就可登录了
root@18:53:39~ # mysql -uroot
mysql> update mysql.user set password=PASSWORD('1234') where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
## 我们再把刚刚添加的内容删掉 重启服务 使用我们新的密码就可以登陆上了
systemctl restart mysql
7.脚本安装
#!/bin/bash
echo "--------检查环境----------"
mariadb_name=`rpm -qa | grep -i mariadb`
mysql_name=`rpm -qa | grep -i mysql`
rpm -qa | grep -i mysql
if [ $? -eq 0 ];then
yum -y remove ${mysql_name}
else
echo "没有这个安装包"
fi
rpm -qa | grep -i mariadb
if [ $? -eq 0 ];then
yum -y remove ${mariadb_name}
else
echo "没有这个安装包"
fi
echo "--------创建用户以及用户组-------"
id mysql
if [ $? -eq 0 ];then
echo "已经创建好了"
else
groupadd mysql && useradd -r -g mysql mysql
fi
echo "------安装依赖--------"
while true
do
yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel perl-Data-Dumper net-tools
if [ $? -eq 0 ];then
echo "ok"
break
fi
done
echo "---------创建目录----------"
mysql_dir=/usr/local/mysql
if [ -e $mysql_dir ];then
echo "已存在"
else
mkdir -p /usr/local/mysql
fi
echo "------------下载安装包------------"
while true
do
if [ -e /usr/local/mysql/mysql-5.6.28 ];then
echo "安装包已经存在了"
else
cd /usr/local/mysql && wget http://wget dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.28.tar.gz && tar -zxf mysql-5.6.28.tar.gz
if [ $? -eq 0 ];then
echo "ok"
break
fi
fi
break
done
:<<eof
echo "-------编译并安装"
cd /usr/local/mysql/mysql-5.6.28 && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
cd /usr/local/mysql/mysql-5.6.28/ && make
cd /usr/local/mysql/mysql-5.6.28/ && make install
eof
echo "-----------修改权限---------"
chown -R mysql:mysql /usr/local/mysql
echo "-----------设置全局环境变量---------"
echo -e "PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin \nexport PATH" >> /etc/profile
source /etc/profile
echo "进入安装mysql的路径,执行初始化的配置脚本,创建系统自带的数据库和表"
chmod +x /usr/local/mysql/mysql-5.6.28/scripts/mysql_install_db
cd /usr/local/mysql/mysq-5.6.28 && ./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
mv /etc/my.cnf /etc/my.cnf.back
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql