我使用源码编译的形式来安装mysql,使用的mysql5.6。
1.下载
wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.40.tar.gz
2.卸载自带mysql
因为mysql收费了,所以centos7.4内部默认不再集成mysql,而是集成mariadb
。安装mysql会和mariadb的文件冲突,所以需要先卸载mariadb
。
#列出安装的mysql。
rpm -qa | grep mariadb ###显示mariadb-libs-5.5.56-2.el7.x86_64
#卸载
rpm -e mariadb-libs-5.5.56-2.el7.x86_64
####会报如下错误
error: Failed dependencies:
libmysqlclient.so.18()(64bit) is needed by (installed) postfix-2:2.10.1-6.el7.x86_64
libmysqlclient.so.18(libmysqlclient_18)(64bit) is needed by (installed) postfix-2:2.10.1-6.el7.x86_64
#强制卸载
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
#检查是否有遗留文件。如果有删除即可。
ls /etc/my.cnf
ll /var/lib/mysql/ ll /var/lib64/mysql(64位)
3.安装各种依赖
yum install gcc gcc-c++
yum install ncurses-devel.x86_64
yum install cmake.x86_64
yum install libaio.x86_64
yum install bison.x86_64
#Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
yum -y install ncurses-devel
#和上面有重复的,我这里是网上抄来的
yum -y install make gcc-c++ cmake bison-devel ncurses-devel gcc \
autoconf automake zlib* fiex* libxml* libmcrypt* libtool-ltdl-devel*
4.指定编译条件
mysql5.5版本之前都是通过./configure进行编译环境检查,mysql5.5之后(含5.5)用的是cmake
。
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/usr/local/mysql/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DMYSQL_TCP_PORT=3306 \
#-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
# 注意使用utf8mb4无法通过编译检查 \
#-DDEFAULT_CHARSET=utf8 \
#-DDEFAULT_COLLATION=utf8_general_ci \
#-DENABLED_LOCAL_INFILE=1 \
各配置选项的含义,可参考mysql官方文档:
https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html
# 【MySQL安装的根目录】默认/usr/local/mysql
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
# 【存放数据的目录】 可以在mysql启动时通过--datadir选项设置。
-DMYSQL_DATADIR=/usr/local/mysql/data
# 【MySQL的sock文件目录】mysql服务器用于监听的套接字,必需是绝对路径,默认是/tmp/mysql.sock。
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock
# 【默认的my.cnf文件目录】。该值在mysql启动时不能设置。但是可以使用--defaults-file=file_name(文件的全路径名)选项来使用指定的配置文件。
-DSYSCONFDIR=/usr/local/mysql/etc
# 【PID文件目录】默认为/var/run/mysqld。使用systemd来管理mysql时会在该目录下创建pid文件。
-DSYSTEMD_PID_DIR=/usr/local/mysql
# 【监听端口】
-DMYSQL_TCP_PORT=3306 \
# 【【编译检查不能通过】】
#-DDEFAULT_CHARSET=utf8mb4
#-DDEFAULT_COLLATION=utf8mb4_unicode_ci
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
# 允许从本地导入数据
-DENABLED_LOCAL_INFILE=1
说明:关于设置utf8mb4无法通过编译检查的说明,可参考这篇博客说明:https://yq.aliyun.com/articles/586650
4.编译安装
# 编译。(mysql编译相当的慢。我在阿里云单核2g ECS上要了差不多七八分钟)
make
# 安装
make install
5.初始化数据库
#执行脚本,来创建系统自带的数据库和表
cd /usr/local/mysql/scripts
./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --user=mysql
##上面如果报错,则安装autoconf库
yum -y install autoconf
6.创建用户组、用户
#创建mysql组
groupadd mysql
#创建mysql用户
useradd -r -g mysql mysql
7.设置开机启动
vim /usr/lib/systemd/system/mysqld.service
加入以下内容
[Unit]
Description=MySQL5.6
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target syslog.target
[Service]
Type=forking
#强烈建议在 Type=forking 的情况下明确设置此选项
PIDFile=/usr/local/mysql/mysqld.pid
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf
User=mysql
Group=mysql
PrivateTmp=true
[Install]
WantedBy=multi-user.target
每次修改了该文件,记得要执行以下命令
systemctl daemon-reload
8.设置开机启动
#设置开机启动
systemctl enable mysqld
#启动mysql
systemctl start mysqld
9.防火墙开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
10.mysql安全
执行命令,重置密码 mysql_secure_installation
#会依次出现以下问题。
Set root password? [Y/n]
是否设置root用户的密码 (y。【设置登录密码】)
Remove anonymous users? [Y/n]
是否删除匿名用户 (y)
Disallow root login remotely? [Y/n]
是否禁止root远程登录 (n)
Remove test database and access to it? [Y/n]
是否删除database数据库
Reload privilege tables now? [Y/n]
是否重新加载授权信息 (y)
11.开启root远程登录
默认只允许root帐户在本地登录,如果要远程连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户。
# 开放Root远程连接权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '远程登录密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;
或
# 创建新用户用于远程连接
GRANT ALL PRIVILEGES ON *.* TO '新用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;
12.my.cnf配置
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
#配置默认编码为utf8
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4’
#表名不区分大小写
lower_case_table_names=1
#数据库错误日志文件
log_error=/usr/local/mysql/logs/error.log
13.设置环境变量(可选)
设置环境变量,然后就可以在bin目录之外执行mysql的相关命令。
#打开profile文件
vim /etc/profile
#在文件末尾添加。保存
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOEM/bin
#刷新配置
source /etc/profile