MySQL数据库5.7x版本下载安装
Posted 锦衣admin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库5.7x版本下载安装相关的知识,希望对你有一定的参考价值。
mysql数据库下载安装
获取MySQL
MySQL官网:https://www.mysql.com/
普通用户一般下载社区版的
第一步:单击WOWNLOADS
第二步:找到社区版
第三步:找到服务器端版本
第四步:选择合适的版本
第五步:可以选择下载源码版本或者是软件包版本
第六步:选择glibc版本的MySQL
或第六步:选择源码包(需要编译安装) 安装,建议下载带有Boost可扩展的版本
MySQL官方文档:
CentOS最小化安装时需要勾选开发者工具:
安装最小化配置:
#!/bin/bash
# desc:Operating system initialization
# Modify hostname
os_hostname ()
read -p "Please set the hostname:" hostname
hostnamectl set-hostname "$hostname"
# Modify network card information
static_nic_ip ()
if [ -f /etc/sysconfig/network-scripts/ifcfg-ens33 ];then
sed -i.bak '4s/"dhcp"/"none"/' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i -r '13s/bc5"$/bc6"/' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '4a\\DNS2=114.114.114.114' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '4a\\DNS1=8.8.8.8' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '4a\\NETMASK=255.255.255.0' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '4a\\GATEWAY=10.1.1.2' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '4a\\IPADDR=10.1.1.31' /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
sleep 5
fi
# Turn off the firewall and selinux
secure_firewalld ()
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i.bak '7s/enforcing/disabled/' /etc/selinux/config
# Configure yum source
yum_Tencent ()
yum -y install wget 1>/dev/null
tar -zcPf /etc/yum.repos.d/repo.tar.gz /etc/yum.repos.d/*.repo
rm -f /etc/yum.repos.d/*.repo
# Install Tencent yum source
if !(wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo 1>/dev/null);then
echo "yum installation failed"
else
yum clean all 1>/dev/null
yum makecache 1>/dev/null
fi
# 安装扩展软件(bash-completion自动补全、vim编辑器、net-tools网络工具包以及ntpdate时间同步工具)
expand_sf ()
if ! (yum install bash-completion vim net-tools ntpdate -y);then
echo "Failed to install extension"
else
ntpdate cn.ntp.org.cn
fi
function main
os_hostname
secure_firewalld
static_nic_ip
yum_Tencent
expand_sf
main
安装MySQL
MySQL安装方式介绍
MySQL安装方式:
-
glbic版(属于二进制软件包) 安装(相当于Windows绿色软件,比如你需要配置一些扩展库或者相关软件包,不再需要你去一个个下载,glibc版本的已经给你配置好了),命名方式:mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz 。依赖glibc库,可以安装在通用的Linux系统下
-
源码包编译安装,命名方式:mysql-5.7.31.tar.gz。通用的Linux下都可以编译安装
三种安装方式的区别:
- 在企业中,数据库的安装很少使用rpm方式,大部分都是基于源码安装以及glibc安装!
安装方式 | 优点 | 缺点 |
---|---|---|
rpm | 安装卸载简单 | 可定制性差 |
glibc | 可定制性相比rpm包灵活些 | 安装相比rpm包复杂些,需要手动初始化数据库 |
源码安装 | 可定制性最强,根据需求和功能定制 | 安装麻烦,需要手动初始化数据库 |
区分数据库与数据库实例
什么是MySQL数据库?
- 数据库(database): 操作系统或存储上的数据文件的集合。mysql数据库中,数据库文件可以是* .frm、.MYD、.MYI、*.ibd等结尾的文件, 不同存储引擎文件类型不同。
什么是MySQL数据库实例?
-
数据库实例(instance): 由后台进程或者线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。 数据库实例才是真正操作数据库的。
-
注意:MySQL的后台守护程序mysqld是单进程多线程的工作模式。
什么是MySQL数据库服务器?
- 数据库服务器(database server): 部署安装数据库实例的服务器。
数据库和数据库实例之间的关系是什么?
- 通常情况下,数据库实例和数据库是一 一对应的关系,也就是一个数据库实例对应一个数据库; 但是,在集群环境中存在多个数据库实例共同使用一个数据库。如:oracle RAC
MySQL的GLIBC版本安装
- 通用Linux下的二进制包,已编译好,只需放到相应的安装目录里即可
第一步:上传软件及安装依赖
安装前的上传服务器解压操作:
第一步:安装依赖库libaio库
# yum install libaio -y
第二步:上传软件包解压,了解目录结构
# tar -xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
# ls mysql-5.7.31-linux-glibc2.12-x86_64
bin docs include lib LICENSE man README share support-files
解压完成后,目录结构如下图所示:
默认安装信息 | 默认存放位置 |
---|---|
安装路径 | /usr/local/mysql |
数据目录 | /usr/local/mysql/data |
端口号 | 3306 |
socket文件 | /tmp/mysql.sock |
假设安装需求为:
选项 | 值(自定义也可以采用默认形式) |
---|---|
安装路径 | /mysql_3306 |
数据路径 | /mysql_3306/data |
端口号 | 3306 |
第二步:软件安装
第一步:创建一个MySQL数据库专用账号mysql(其所属组也是mysql)
# useradd -r -s /sbin/nologin mysql
第二步:清空系统中原有mariadb的配置文件(不然MySQL数据库初始化会失败)
# rm -rf /etc/my.cnf
第三步:把mysql解压后的压缩包(blibc版本)移动到根目录下,更名为mysql_3306(移动到哪个目录都可以,只是mysql的安装目录,但必须是空目录,一般情况下是安装在/usr/local/或者/opt目录下,创建其安装目录)
# mv mysql-5.7.31-linux-glibc2.12-x86_64 /mysql_3306
第四步:切换到mysql工作目录mysql_3306下,创建一个mysql-files目录(官方建议创建这个mysql-files目录)
# cd /mysql_3306
# mkdir mysql-files
说明:mysql-files目录为secure_file_priv系统变量提供一个位置 ,该位置将导入和导出操作限制到特定目录。
第五步:更改mysql-files目录权限(文件拥有者和所属组都更改为mysql)
# chown -R mysql.mysql mysql-files
# chmod 750 mysql-files
第六步:初始化数据库(可以实现数据库初始化,而且会产生一个随机密码,安装目录的/bin/mysqld程序执行初始化)
# bin/mysqld --initialize --user=mysql --basedir=/mysql_3306
选项说明:
--initialize:表示初始化
--user=mysql:以mysql用户的身份初始化数据库,产生文件都是mysql作为拥有者
--basedir=xxx:由于更改了mysql的默认安装路径,则需要加--datadir='mysql数据路径来'指定(按照你实际安装的目录)
=> 运行完毕后,观察最后一行,保存root账号的密码,以备后期使用(这个root账户和密码是MySQL数据库的,默认不允许远程连接)
备注:如果初始化成功,在mysql安装目录下面会生成data目录,data目录下还会生成一个mysql目录
第七步:设置安全加密连接(SSL),数据传输会采用加密形式,适合敏感数据(5.7新增,可以不开启加密连接)
# bin/mysql_ssl_rsa_setup --datadir=/mysql_3306/data
=> 由于改变了mysql默认安装目录,所以需要用--datadir指定mysql的数据目录
第八步:将MySQL数据库的启动脚本复制到系统服务管理目录下并修改安装目录和数据目录(因为更改了默认目录)
# cp support-files/mysql.server /etc/init.d/mysql => mysql这个重命名名称可以随意
# vim /etc/init.d/mysql
46行 basedir=/mysql_3306 => mysql安装目录
47行 datadir=/mysql_3306/data => mysql数据目录
注:默认情况下,GBLIC版本的数据库要求安装到/usr/local/mysql目录,其mysql.server脚本中对应的目录也是/usr/local/mysql,
这会导致mysql无法启动。所以可以更改其basedir以及datadir两个变量,将mysql的安装目录和数据目录改成你指定的目录即可
注意:改的是init.d目录下的启动脚本里面的文件
第九步:启动MySQL数据库(不能使用systemctl,只能使用service)
# service mysql start => 在init.d目录下启动脚本叫啥名字service 什么名字启动 star 数据库
特别说明:当MySQL启动成功后,其日志会自动写入到data数据目录中的主机名称.err文件中,这个文件一定要多看,
涉及MySQL无法启动、启动报错,其详细的原因99%在.err文件中可以找到问题所在!
软件的安装常见问题答疑
问题1:为什么一定要删除/etc/my.cnf文件,不删除有何影响?
答:/etc/my.cnf文件是操作系统为mariadb软件预留的配置的文件,之所以一定要删除这个文件,主要原因在于数据库在初始化时,首先在自己的安装目录下寻找有没有my.cnf配置文件,如果有,会自动根据里面的配置信息进行初始化。如果找不到,则到/etc目录下寻找my.cnf文件,如果有,依然会按照其内部的配置进行初始化,但是由于/etc目录下的my.cnf文件是mariadb的,这会导致我们的初始化如果按照mariadb的配置,会导致初始化失败。(mariadb和mysql创始人是同一个人,所以他们的配置文件都叫my.cnf,在进行初始化时两者会产生冲突)
问题2:mysql-files文件夹到底干什么的?
答:目前mysql-files没有什么用,但是你必须要创建,因为GLIBC属于二进制软件包,其很多配置已经默认了,包括mysql-files文件夹,如果没有这个文件夹可能导致mysql无法启动。
mysql-files:主要用于数据文件的导入与导出(备份与还原),MySQL的备份会产生一个文件,可以xxx.sql或xxx.txt。mysql-files就是导入与导出时,所指定的默认目录。
问题3:到底怎么判断数据库是否初始化成功了?
答:数据库的安装容易出错的地方就是初始化,一旦初始化失败了,数据库100%启动报错。如何确认数据库是否初始化成功了呢?主要看安装目录下有没有生成一个data的文件夹,data目录下还有一个mysql文件夹
问题4:为什么一定要把数据库启动脚本mysql.server放在/etc/init.d目录下,不放行不行?
答:不放也可以,但是这个时候就不能使用service命令启动以及添加到开机启动项了。只能通过bin/mysqld_safe脚本启动数据库。
/etc/init.d是CentOS6以及早期版本中的服务脚本目录,只要把Shell启动脚本放在这个目录下,你就可以使用service进行管理。
问题5:为什么一定要改变/etc/init.d/mysql中的basedir与datadir?
答:GLIBC版本属于二进制版本,默认已经配置了很多内容,包括默认的安装路径/usr/local/mysql,一旦你的mysql没有安装在这个目录下,则必须手工设置basedir以及datadir其位置,否则脚本无法启动mysql程序
问题6:如何让mysql自动启动?
# chkconfig --list 查询系统中的所有开机启动项
# chkconfig --add mysql 必须与/etc/init.d目录下的脚本名称一致
# chkconfig mysql on 把2345四种模式全部开启(3字符界面,5图形界面)
MySQL GLIBC版本后续配置
- 可以用
bin/mysql
此命令进入MySQL客户端
需要进入MySQL安装目录/mysql_3306
进行配置
第一步:更改管理员root账号的密码
方法1:
# bin/mysqladmin -uroot password '123' -p => 123为你修改的密码
Enter password:输入刚刚初始化产生的临时密码
备注:会给出一个警告,警告内容是不建议在终端输入密码,但是密码已经修改成功了
方法2: 进入mysql修改
# bin/mysql -uroot -p临时密码 => 进入MySQL数据库
mysql> set password=password('123'); => 未来版本将会弃用(通过password函数修改)
或
mysql> set password='123'; => 123为你修改的密码
mysql> flush privileges; => 重置完成后,建议刷新权限,让其立即生效
第二步:把mysql客户端命令添加到环境变量,以后可以随时访问
# echo 'export PATH=$PATH:/mysql_3306/bin' >> /etc/profile => 添加到全局配置文件中
# source /etc/profile => 重新加载一下就生效了
备注:设置完成后,就可以在任意位置调用mysql客户端命令进入mysql:"mysql -uroot -p"
第三步:手工定义MySQL的配置文件
# vim /mysql_3306/my.cnf
[mysqld]
basedir=/mysql_3306
datadir=/mysql_3306/data
socket=/tmp/mysql.sock
选项说明:
[mysqld] 代表针对服务器端进行配置
basedir 代表数据库的安装目录
datadir 代表数据目录,以后专门用于存放数据文件的(核心目录)
socket 代表套接字文件,专门为客户端与服务器端连接提供一个桥梁(客户端连接mysqld服务程序需要套接字提供支持)
# service mysql restart => 配置完重启一下
第四步:安全配置(对于生产环境比较重要,也相当于初始化)
# mysql_secure_installation
第五步:将服务添加到开机启动项
# chkconfig --add mysql 必须与/etc/init.d目录下的脚本名称一致
# chkconfig mysql on 把2345四种模式全部开启(3字符界面,5图形界面)
# chkconfig --list 查询系统中的所有开机启动项
第四步:安全配置如图
如果第四步不小心安装了密码校验器就在配置文件上增加一行
# vim /mysql_3306/my.cnf => 打开MySQL配置文件增加一行
[mysqld]
....
validate_password=OFF => 表示关闭MySQL密码强度检测
# service mysql restart => 重启服务生效
MySQL源码编译安装
- 源码安装三步:配置 --> 编译 --> 安装
- 一台服务器可以安装多个MySQL数据库(只要端口、套接字文件不一样,且安装目录不在同一个目录即可)
下载带有Boost版本的MySQL源码包:mysql-boost-5.7.31.tar.gz (5.7增加了boost的扩展库版本,就不需要另外配置 )
常用配置项选项:
配置选项 | 描述 | 默认值 | 建议值 |
---|---|---|---|
CMAKE_INSTALL_PREFIX | 安装基目录(basedir) | /usr/local/mysql | 根据需求 |
MYSQL_DATADIR | 数据目录(datadir) | $basedir/data | 根据需求 |
SYSCONFDIR | 默认配置文件my.cnf路径 | /etc | |
MYSQL_TCP_PORT | TCP/IP端口 | 3306 | 非默认端口 |
MYSQL_UNIX_ADDR | 套接字socket文件路径 | /tmp/mysql.sock | $basedir/ |
DEFAULT_CHARSET | 默认字符集 | latin1 | utf8mb4 |
DEFAULT_COLLATION | 默认校验规则 | latin1_swedish_ci | utf8mb4_general_ci |
WITH_EXTRA_CHARSETS | 扩展字符集 | all | all |
ENABLED_LOCAL_INFILE | 是否启用本地加载外部数据文件功能 | OFF | 建议开启 (可以导入外部数据文件) |
WITH_SSL | SSL支持类型 | system | 建议显式指定 |
WITH_BOOST | Boost库源代码的位置 | Boost库是构建MySQL所必需的,建议事先下载 |
存储引擎相关配置项:
- 以下选项值均为布尔值,0或1;0代表不编译到服务器中,1代表编译,建议都静态编译到服务器中。
- 其他的存储引擎可以根据实际需求在安装时通过WITH_xxxx_STORAGE_ENGINE=1的方式编译到服务器中。
配置选项 | 描述 |
---|---|
WITH_INNOBASE_STORAGE_ENGINE | 将InnoDB存储引擎插件构建为静态模块编译到服务器中;建议编译到服务器中 |
WITH_PARTITION_STORAGE_ENGINE | 是否支持分区 |
WITH_FEDERATED_STORAGE_ENGINE | 本地数据库是否可以访问远程mysql数据 |
WITH_BLACKHOLE_STORAGE_ENGINE | 黑洞存储引擎,接收数据,但不存储,直接丢弃 |
WITH_MYISAM_STORAGE_ENGINE | 将MYISAM存储引擎静态编译到服务器中 |
假设安装需求:
安装需求 | 具体配置 |
---|---|
安装目录(basedir) | /mysql_3307 |
数据目录(datadir) | /mysql_3307/data |
端口号 | 3307 |
socket文件位置 | $basedir/mysql.sock |
字符集 | utf8mb4 |
第一步:创建MySQL账号和删除原有mariadb的配置文件
第一步:创建一个MySQL数据库专用账号mysql(其所属组也是mysql)
# useradd -r -s /sbin/nologin mysql
第二步:清空(或重命名)系统中原有mariadb的配置文件(不然MySQL数据库初始化会失败)
# mv /etc/my.cnf /etc/my.cnf.bak
第二步:安装MySQL源码包所需要的依赖库
- 安装依赖包
# yum -y install cmake ncurses-devel openssl-devel gcc-c++ libaio-devel
说明:环境不一样,可能还需要安装其他依赖包,比如perl相关的包pcre-devel
- 如果下载的是不带Boost版本的还需要额外下载Boost库源代码
# "wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz"
第三步:上传软件解压源码包并进行配置操作,编译+安装
- 编译安装并不需要更改解压包目录位置
第一步:解压源码包并进入解压目录
# tar xf mysql-boost-5.7.30.tar.gz
# cd mysql-5.7.30/
第二步:根据需求编写一个配置脚本(基于cmake脚本进行配置)
# vim myconfig.sh
# chmod +x myconfig.sh => 编写完配置脚本增加执行权限
# ./myconfig.sh => 运行脚本,配置MySQL源码
第三步:编译+安装
# make [-j2] && make install
选项说明:
-j2 :代表同时开启多个线程共同实现编译操作(可以是j3、j4)
看你处理器是几核,N核选 -jN,此选项也可不选
- 第二步配置脚本
#l 第一种:下载带有boost扩展库的源码包(配置脚本)
# vim myconfig.sh
cmake . \\
-DCMAKE_INSTALL_PREFIX=/mysql_3307 \\
-DMYSQL_DATADIR=/mysql_3307/data \\
-DMYSQL_TCP_PORT=3307 \\
-DMYSQL_UNIX_ADDR=/mysql_3307/mysql.sock \\
-DWITH_INNOBASE_STORAGE_ENGINE=1 \\
-DWITH_PARTITION_STORAGE_ENGINE=1 \\
-DWITH_FEDERATED_STORAGE_ENGINE=1 \\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \\
-DWITH_MYISAM_STORAGE_ENGINE=1 \\
-DENABLED_LOCAL_INFILE=1 \\
-DEXTRA_CHARSETS=all \\
-DDEFAULT_CHARSET=utf8mb4 \\
-DDEFAULT_COLLATION=utf8mb4_general_ci \\
-DWITH_SSL=system \\
-DWITH_BOOST=boost
#l 第二种:没有下载带boost扩展库的源码包(提前下载boost库的配置脚本)
需要提前下载boost扩展库:(好处是避免联网下载不稳定)
wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
tar xf boost_1_59_0.tar.gz -C /opt/
# vim myconfig.sh
cmake . \\
-DCMAKE_INSTALL_PREFIX=/mysql_3307 \\
-DMYSQL_DATADIR=/mysql_3307/data \\
-DMYSQL_TCP_PORT=3307 \\
-DMYSQL_UNIX_ADDR=/mysql_3307/mysql.sock \\
-DWITH_INNOBASE_STORAGE_ENGINE=1 \\
-DWITH_PARTITION_STORAGE_ENGINE=1 \\
-DWITH_FEDERATED_STORAGE_ENGINE=1 \\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \\
-DWITH_MYISAM_STORAGE_ENGINE=1 \\
-DENABLED_LOCAL_INFILE=1 \\
-DEXTRA_CHARSETS=all \\
-DDEFAULT_CHARSET=utf8mb4 \\
-DDEFAULT_COLLATION=utf8mb4_general_ci \\
-DWITH_SSL=system \\
-DWITH_BOOST=/opt/boost_1_59_0
#l 第三种:没有下载带boost扩展库的源码包(配置时让系统自己去联网下boost库配置脚本,网络不好的不建议此方法)
# vim myconfig.sh
cmake . \\
-DCMAKE_INSTALL_PREFIX=/mysql_3307 \\
-DMYSQL_DATADIR=/mysql_3307/data \\
-DMYSQL_TCP_PORT=3307 \\
-DMYSQL_UNIX_ADDR=/mysql_3307/mysql.sock \\
-DWITH_INNOBASE_STORAGE_ENGINE=1 \\
-DWITH_PARTITION_STORAGE_ENGINE=1 \\
-DWITH_FEDERATED_STORAGE_ENGINE=1 \\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \\
-DWITH_MYISAM_STORAGE_ENGINE=1 \\
-DENABLED_LOCAL_INFILE=1 \\
-DEXTRA_CHARSETS=all \\
-DDEFAULT_CHARSET=utf8mb4 \\
-DDEFAULT_COLLATION=utf8mb4_general_ci \\
-DWITH_SSL=system \\
-DDOWNLOAD_BOOST=1 \\
-DWITH_BOOST=/mysql_3307/boost
选项说明:(具体可看查看上方常用配置项对应)
-DCMAKE_INSTALL_PREFIX :安装路径
-DMYSQL_DATADIR :数据目录
-DMYSQL_TCP_PORT :端口号
-DMYSQL_UNIX_ADDR :套接字文件位置
-DWITH_BOOST=boost:因为本地集成了Boost扩展库,所以直接写boost就好
不自带boost版本源码:
方法一:自动联网下载:
在配置脚本中增加下方两个选项:
-DWITH_BOOST=/mysql_3307/boost \\
-DDOWNLOAD_BOOST=1
方法二:
自己下载Boost库,
# "wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz" => 下载boost库并解压
=> 只需要将 "-DWITH_BOOST=Boost的解压目录"即可
编译报错常见问题解析
问题1:没有Boost导致安装失败
解决方案:
问题2:编译安装中途报错
解决方案:只能重新编译一下
第一步:一般编译开后会产生一个CMakeCache.txt文件,需要将它删除掉
# rm -f CMakeCache.txt
第二步:重新编译+安装
# make -j2 && make install
第四步:初始化数据库
注意:初始化需要在安装目录中初始化
其实和glibc版本的初始化异曲同工
与glibc版本初始化的区别:
- 不需要进入到
/etc/init.d/mysql_3007
中去修改basedir和datadir两个参数,因为在源码编译安装过程中会自动调整其安装目录和数据目录
第一步:编译安装成功后进入安装目录
# cd /mysql_3307
第二步:创建mysql-files目录并修改文件权限
# mkdir mysql-files
# chown -R mysql.mysql mysql-files => 修改mysql-files目录的权限
# chown -R mysql.mysql /mysql_3307 => 修改MySQL安装目录权限
# chmod 750 mysql-files
第三步:数据库初始化操作
# bin/mysqld --initialize --user=mysql --basedir=/mysql_3307 --datadir=/mysql_3307/data
第四步:拷贝mysql.server脚本到/etc/init.d目录,然后启动数据库
# cp support-files/mysql.server /etc/init.d/mysql_3307
# service mysql_3307 start
启动异常的解决方案:
当service mysql_3307 start
时出现以下错误
出现问题第一步需要查看MySQL的错误日志,错误日志在:data数据目录/主机名.err
cat /mysql_3307/data/mysql.err
正常情况下一般是Note的提示信息。出现以上问题的主要原因在于mysql这个用户对/mysql_3307目录没有写入文件的权限,写入mysql_socket套接字文件(-DMYSQL_UNIX_ADDR=/mysql_3307/mysql.sock
因为套接字文件创建在安装目录下)。
解决方案:直接修改安装目录的文件权限,因为这个目录是mysql用户使用的,所以直接将其拥有者和组权限修改为mysql是没有影响的
# chown -R mysql.mysql /mysql_3307
MySQL 源码 编译安装后的后续配置
第一步:编写MySQL配置文件,my.cnf
# vim /mysql_3307/my.cnf
[mysqld]
basedir=/mysql_3307
datadir=/mysql_3307/data
socket=/mysql_3307/mysql.sock
# service mysql_3307 restart => 重启MySQL服务
第二步:更改管理员root账号的密码
方法1:
# bin/mysqladmin -uroot password '123' -p => 123为你修改的密码
Enter password:输入刚刚初始化产生的临时密码
备注:会给出一个警告,警告内容是不建议在终端输入密码,但是密码已经修改成功了
方法2: 进入mysql修改
# bin/mysql -uroot -p临时密码 => 进入MySQL数据库
mysql> set password=password('123'); => 未来版本将会弃用(通过password函数修改)
或
mysql> set password='123'; => 123为你修改的密码
mysql> flush privileges; => 重置完成后,建议刷新权限,让其立即生效
第三步:给bin/mysql程序创建软连接(注意不要将其加入全局配置文件,会和glibc冲突)
# ln -s /mysql_3307/bin/mysql /usr/bin/mysql_3307
mysql_3307 -uroot -p => 就可以进入mysql客户端
第四步:安全配置(对于生产环境比较重要,也相当于初始化)和glibc版本一样
# bin/mysql_secure_installation => /mysql_3307目录下的bin目录
注意:如果还安装了上面glibc版本不要用mysql_secure_installation,因为其加入了环境变量直接使用是glibc版本的初始化
第五步:将服务添加到开机启动项
# chkconfig --add mysql_3307 必须与/etc/init.d目录下的脚本名称一致
# chkconfig mysql_3307 on 把2345四种模式全部开启(3字符界面,5图形界面)
# chkconfig --list 查询系统中的所有开机启动项
MySQL常见问题解决方案
如何访问不同的数据库解决方案
我们之所以能够连接到数据库里的本质是套接字
方案一: 直接使用MySQL数据库对应的客户端软件进行访问
访问glibc版本安装的MySQL:
#l /mysql_3306/bin/mysql -uroot -p
访问源码安装的MySQL:
#l /mysql_3307/bin/mysql -uroot -p
方案二: 定义别名的方式访问
- alias是shell的内置命令,可以用来设置命令的别名;同样使用unalias取消设置的别名
定义命令的别名:
# alias mysql_3306="/mysql_3306/bin/mysql"
# alias mysql_3307="/mysql_3307/bin/mysql"
通过别名访问数据库:
# mysql_3306 -uroot -p => glibc版
# mysql_3307 -uroot -p => 源码版
取消命令别名:
# unalias mysql_3306
# unalias mysql_3307
方案三: 拷贝相应命令到PATH可以识别的路径下并重命名(或者创建软连接也可以,一样的意思)
- 通过
echo $PATH
命令查看能够放到的路径
第一种:拷贝命令
# cp /mysql_3306/bin/mysql /usr/bin/mysql_3306
# cp /mysql_3307/bin/mysql /usr/bin/mysql_3307
第二种:创建命令的软连接
# ln -s /mysql_3306/bin/mysql /usr/bin/mysql_3306
# ln -s /mysql_3307/bin/mysql /usr/bin/mysql_3307
访问:
# mysql_3306 -uroot -p => glibc版
# mysql_3307 -uroot -p => 源码版
MySQL忘记密码的解决方案
方案一:跳过授权表(通用)
理解授权表:
MySQL数据库里面有一个mysql.user
表(也称授权表),这个表里面保存着数据库的账号密码。当你在输入mysql -uroot -p
登录时。MySQL服务端会将你输入的账号密码对应mysql.user
这个表里面的账号密码
如果账号密码对应则成功登录,否则登录不成功
解决方法:跳过授权表重启数据库(以GLIBC 3306为例)
第一步:关闭数据库
# mysqladmin shutdown -p => 命令存放在/mysql_3306/bin/mysqladmin
=> 演示效果需要输入密码
或
# service mysql stop => 直接启用服务命令关闭数据库
第二步:跳过授权表启动
#l /mysql_3306/bin/mysqld --defaults-file=/mysql_3306/my.cnf --skip-grant-tables --skip-networking=on --user=mysql &
选项说明:
/mysql_3306/bin/mysqld:只要数据库能运行,它底下就有一个mysqld这个进程
--defaults-file=/mysql_3306/my.cnf:加载配置文件
--skip-grant-tables:代表跳过授权表
--skip-networking=on:重启服务
--user=mysql:通过mysql这个用户启动
&:把命令放到后台执行,不然会占用终端
特别说明:在执行完这条命令后,你会看见终端卡住了,这时候需要你手动再回车一下,因为&需要这样操作
第三步:进入数据库刷新授权表
# mysql -uroot -p => 命令存放在/mysql_3306/bin/mysql
Enter password:什么都不要输入,直接回车即可
# mysql> flush privileges; => 刷新授权表,让user启用,不然修改不了user表数据
第四步:修改密码
# mysql> alter user 'root'@'localhost' identified by '123'; => 5.7版本
# mysql> flush privileges;
如果上面的语句修改不了换一条语句
# mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass') WHERE User = 'root' AND Host = 'localhost';
=> 5.6版本的字段名称不一样,所用语句不一样
# mysql> flush privileges;
第五步:修改密码后,使用jobs + kill命令,停止正在运行的mysqld进程。然后使用service启动服务
# jobs => 查看后台执行的进程和进程号
# kill %pid => 结束刚才启动的跳过授权表启动的脚本,执行完回车
# service mysql restart => 重启服务
方案二:Unix和类Unix系统重置
第一步:停止数据库
# mysqladmin shutdown -p => 命令存放在/mysql_3306/bin/mysqladmin
=> 不输入密码,等待三秒自动退出
第二步:编写创建密码语句到文件
# echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '123';" >> /mysql_3306/mysql.pass
=> 注意:该文件一定要对启动用户如mysql有所有权限
# chown -R mysql.mysql /mysql_3306
第三步:指定密码文件启动数据库
# mysqld --defaults-file=/mysql_3306/my.cnf --init-file=/mysql_3306/mysql.pass --user=mysql &
第四步:删除密码文件,并测试
# rm -f /mysql_3306/mysql.pass
# mysql -uroot -p123 => 测试能否通过密码文件修改密码
# mysql> flush privileges; => 进入后刷新一下权限
以上是关于MySQL数据库5.7x版本下载安装的主要内容,如果未能解决你的问题,请参考以下文章
记一次 Centos7 手动安装 Mysql 5.7 数据库 (使用 Mysql 的 rpm 文件)