Home CentOS安装MySQL
Post
Cancel

CentOS安装MySQL

1. 检测系统是否有自带MySQL

1
2
3
4
5
6
7
#检查是否安装过MySQL
rpm -qa | grep mysql 
#检查是否存在Mariadb数据库(内置的MySQL数据库),有则强制删除
rpm -qa | grep mariadb 
#强制删除
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 
rpm -e --nodeps mariadb-5.5.68-1.el7.x86_64 

2. 文件上传到Linux服务器后进行解压

1
2
3
4
5
6
# 本次安装目录为/data/database
mkdir -p /data/database
# 解压MySQl安装包
tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
# MySQL安装包名字太长,为了方便输入,我们更改一下文件夹的名字
mv mysql-5.7.17-linux-glibc2.5-x86_64/ mysql-5.7.17

3. 创建mysql用户组和mysql用户

1
2
3
4
5
6
# 创建mysql用户组
groupadd mysql
# 创建mysql用户并放入mysql用户组
useradd -g mysql mysql
# 设置mysql密码
passwd mysql 

4. 建立必要的目录

1
2
3
4
5
6
7
8
# 数据存放目录
mkdir /data/database/mysql-5.7.17/data
# 日志目录和日志文件
mkdir /data/database/mysql-5.7.17/log
touch /data/database/mysql-5.7.17/log/mysqld.log
# pid目录和记录mysqld进程pid的文件
mkdir /data/database/mysql-5.7.17/pid
touch /data/database/mysql-5.7.17/pid/mysqld.pid

5. 更改所属的组和用户

1
chown -R mysql:mysql /data/database/mysql-5.7.17

6. 在etc下新建配置文件my.cnf

从MySQL-3.X开始,MySQL的配置文件加载顺序最优先就是/etc/my.cnf

1
2
3
4
5
6
7
8
# 查找my.cnf的位置
/data/database/mysql-5.7.17/bin/mysqld --verbose --help |grep -A 1 'Default options'
# MySQL寻找my.cnf的顺序为
/etc/my.cnf 
/etc/mysql/my.cnf 
/usr/local/mysql/etc/my.cnf 
/home/mysql-5.7.17/my.cnf 
~/.my.cnf 

新建配置文件my.cnf。

1
2
3
cd /etc
touch my.cnf
vi my.cnf

在my.cnf里输入以下配置信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[client]
default-character-set=utf8

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 

[mysqld]
skip-name-resolve
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=/data/database/mysql-5.7.17
# 设置mysql数据库的数据的存放目录
datadir=/data/database/mysql-5.7.17/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB 
# 设置忽略大小写
# lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
# lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
# lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的
lower_case_table_names=1
max_allowed_packet=200M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 定期清理日志
expire_logs_days=3
log-error=/data/database/mysql-5.7.17/log/mysqld.log
pid-file=/data/database/mysql-5.7.17/pid/mysqld.pid

7. 初始化数据库

有两种方式,在5.7.6之前初始化的方法是:

1
2
3
4
5
cd /data/database/mysql-5.7.17/bin
./mysql_install_db \
--user=mysql \
--basedir=/data/database/mysql-5.7.17/ \
--datadir=/data/database/mysql-5.7.17/data/

5.7.6之后的版本初始化数据库不再使用mysql_install_db:

1
2
3
4
5
6
7
8
9
10
11
cd /data/database/mysql-5.7.17/bin
./mysqld \
--user=mysql \
--basedir=/data/database/mysql-5.7.17 \
--datadir=/data/database/mysql-5.7.17/data \
--lower-case-table-names=1 \
--initialize

# --lower-case-table-names=1是因为my.cnf中,我们要开启表名大小写敏感
# 这个不能在后期设置,必须在安装阶段初始化时进行设置
# 否则my.cnf中不可以配置该属性,配置了库会启动失败。

如果出现如下图所示则为安装成功,红线部分为生成的默认密码:默认密码一定要记住,一会要用。默认密码在mysqld.log日志里,如果忘记了可以到日志里找。

初始化完成后把/etc/my.cnf复制到/data/database/下,然后删除/etc/my.cnf,启动时加载/data/database/my.cnf,防止损坏数据库。

8. 配置启动文件

1
2
3
cp /data/database/mysql-5.7.17/support-files/mysql.server /etc/init.d/mysqld
# 或创建软链
ln -s /data/database/mysql-5.7.17/support-files/mysql.server /etc/init.d/mysql

9. 创建软链

mysqld_safe默认会从/usr/local/mysql/bin目录中去寻找启动脚本mysqld,但是我安装mysql的目录是/data/database/mysql-5.7.17,因此可以在/usr/local/mysql/bin/目录下创建一个/home/mysql-5.7.17/bin/mysqld的软链。

1
2
mkdir -p /usr/local/mysql/bin
ln -s /data/database/mysql-5.7.17/bin/mysqld /usr/local/mysql/bin/mysqld 

10. 配置启动脚本

startMySQL.sh

1
2
3
4
5
6
#!/bin/sh
LANG=en_US.UTF-8
MYSQL_HOME=/data/database/mysql
PATH=$MYSQL_HOME/bin:$PATH
 
mysqld --defaults-file=/data/database/my.cnf &

stopMySQL.sh

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh 
LANG=en_US.UTF-8
MYSQL_HOME=/data/database/mysql
PATH=$MYSQL_HOME/bin:$PATH
mysqladmin --defaults-file=/data/database/my.cnf  -uroot -p  shutdown
 
echo '查询进程ID和端口监听,没有正常退出的话,自己kill吧!'
echo 'ps -ewf | grep mysqld'
ps -ewf | grep mysqld
 
echo 'netstat -na |grep 13306'

11. 配置环境变量

1
2
3
4
5
6
7
su mysql
vi ~/.bash_profile
# 添加以下内容
export MYSQL_HOME=/data/database/mysql-5.7.17/
export PATH=$PATH:$MYSQL_HOME/bin
# 刷新环境变量
source ~/.bash_profile

关于环境变量

  • etc目录下存放系统管理和配置文件 (系统配置)
    • /etc/profile:为所有的用户设置系统范围的环境变量和启动顺序,当用户登录时读取该文件,该文件被执行并从/etc/profile.d目录的配置文件中搜集shell的设置,这个文件对每个shell都有效。
    • /etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时该文件被读取。也就是说,当用户shell执行了bash时,运行这个文件。
  • 用户配置
    • ~/.profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,它设置一些环境变量,然后执行用户的.bashrc文件。
    • ~/.bashrc:该文件包含专用于某个用户的bash shell的bash信息,当该用户登录时以及每次打开新的shell时,该文件被读取。
    • ~/.bash_profile:文件中内容调用的是~/.bashrc文件。

12. 修改临时密码

1
2
3
4
5
su mysql
# 用临时密码登录mysql
mysql -u root –p
# 修改成新的密码
mysql> set password for root@localhost = password('root');

13. 开放远程连接

1
2
3
4
5
6
7
use mysql;
# GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '远程连接密码'; 
grant all privileges on *.* to 'root'@'%' identified by 'root';
# 刷新授权
flush privileges;
# 退出
quit;

14. 开放3306端口

1
2
3
4
5
6
7
su root
# 开启3306
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 查看已经开放的端口
firewall-cmd --list-ports 

15. 设置开机自启

1
2
3
4
5
6
7
8
# 将服务文件拷贝到init.d下,并重命名为mysql,这一步前面已经做过
cp /home/mysql-5.7.17/support-files/mysql.server /etc/init.d/mysqld
# 赋予可执行权限
chmod +x /etc/init.d/mysqld
# 添加服务
chkconfig --add mysqld
# 显示服务列表
chkconfig --list

至此,CentOS7安装MySQL-5.7.17完成。

16. 新建MySQL用户并授权

1
2
3
4
# 新建用户test1,密码test1
mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';
# 授予普通DBA管理某个MySQL数据库的权限
mysql> grant all privileges on testdb to test1@'localhost'
This post is licensed under CC BY 4.0 by the author.