小白学习MySQL - 数据库软件和初始化安装

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDSClaw,2核4GB
简介: MySQL 5.7和8.0的安装

作为个人学习环境来说,搭建一套VMWare的环境,算是性价比最高的一种选择,当然你可以购买一些公有云服务器。


Linux的安装就不在这赘述了,重点说说MySQL数据库的安装。


首先,就是下载介质,MySQL官网就可以下,这两个链接都可以的,

https://www.mysql.com/downloads/

https://dev.mysql.com/downloads/mysql/


区别就是前者是商业版,后者是社区版,从软件自身来说,两者都是相同的,不同的是商业版可以购买享受官方的技术服务,社区版只能从社区获得技术支持。


从下载选项中,我们看到支持很多的操作系统,例如Windows、各种Linux、Solaris、macOS等等,

image.png


对企业来说,一般会选择非Windows平台安装MySQL,我们的测试环境选择在Linux下安装MySQL,其中操作系统版本是Red Hat Enterprise Linux Server release 7.5 (Maipo),数据库是MySQL 5.7和MySQL 8.0。


MySQL其实和Oracle在某些地方很相像,在这我们说的“安装数据库“,算是个广义概念,可以拆成俩步骤,一是安装数据库软件,二是初始化数据库,首先我们说数据库软件的安装。


Linux下的安装可以分成几类,rpm安装、源码安装、二进制安装,

1. rpm安装,可能很简单,直接执行rpm指令,即可完成安装,但是这种安装,不是很灵活,例如不能改动安装路径。

2. 源码安装,顾名思义,下载的是MySQL的源码,通过执行cmake进行编译来安装,用时较长,能根据自己的需要进行自定义配置。

3. 二进制安装,官方提供的二进制安装包,都是针对特定平台专门优化过的,无需考虑过多的环境因素,直接解压即可,还可以根据实际需求做一些个性化的配置。


一、rpm安装

可参考文末链接,通过rpm安装MySQL 5.6,不在此赘述。


二、源码安装

这种安装操作,简单尝试一下,5.7和8.0基本相同,以5.7为例。


介质通常是.tar.gz文件,mysql-VERSION.tar.gz格式压缩包,例如,

mysql-5.7.32.tar.gz

mysql-8.0.23.tar.gz


1. 卸载Linux自带的MariaDB,

rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodepsrpm -e mariadb-5.5.56-2.el7.x86_64 --nodepsrpm -e mariadb-server-5.5.56-2.el7.x86_64 --nodeps


2. 创建用户、用户组,(可能已存在,继续使用,或者删除重建)

groupadd mysql
useradd -g mysql mysql


3. 设置操作系统的资源限制,

vi /etc/security/limits.conf
mysql            soft    nproc          2047
mysql            hard    nproc          16347
mysql            soft    nofile         1024 
mysql            hard    nofile         65536


4. 安装依赖包,(可能有些包已经存在)

yum install bison libaio-devel* perl gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel


5. 源码安装需要cmake,一种方式是通过yum安装,但是这种操作,并未生成CMakeCache.txt,会导致安装数据库失败,可能还是配置问题或者有其他workaround,没太深究,

yum install cmake


选择了另一种方式即通过wget下载安装,

wget https://cmake.org/files/v3.9/cmake-3.9.0.tar.gz
cd cmake-3.9.0
./configure --prefix=/opt/software/cmake
gmake
make install


从5.7开始,安装数据库时,需要使用boost,下载boost_1_59_0.tar.gz,

http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz


6. 安装数据库,cmake安装,基础配置如下(可根据实际需求,调整配置参数),DWITH_BOOST是刚才下载解压的路径,

/opt/software/cmake/bin/cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysql/mysql7 \
-DDEFAULT_CHARSET=utf-8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DCOMPILATION_COMMENT="MySQL Server(GPL)" \
-DSYSCONFDIR=/opt/mysql/data/3306 \
-DMYSQL_UNIX_ADDR=/opt/mysql/data/3306/mysql.sock \
-DWITH_BOOST=/opt/software/boost_1_59_0


执行make和make install,

make && make install


整个过程,将近1小时。


三、二进制安装

介质下载,MySQL 5.7,我们选择当前最高的5.7.32,指定RHEL7平台,下载gz文件,文件名为mysql-5.7.32-el7-x86_64.tar.gz,

image.png

image.gif

MySQL 8.0,我们选择当前最高的8.0.23,指定RHEL7平台,下载gz文件,文件名为mysql-8.0.23-el7-x86_64.tar.gz,

image.gifimage.png


具体安装步骤上,1-4和上述安装相同。

1. 卸载Linux自带的MariaDB,

rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps
rpm -e mariadb-5.5.56-2.el7.x86_64 --nodeps
rpm -e mariadb-server-5.5.56-2.el7.x86_64 --nodeps


2. 创建用户、用户组,(可能已存在,继续使用,或者删除重建)

groupadd mysql
useradd -g mysql mysql


3. 设置操作系统的资源限制,

vi /etc/security/limits.conf 
mysql            soft    nproc          2047
mysql            hard    nproc          16347
mysql            soft    nofile         1024 
mysql            hard    nofile         65536


4. 安装依赖包,(可能有些包已经存在)

yum install bison libaio-devel* perl gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel


5. 设置路径结构

因为我的磁盘空间有限,为了能兼顾实际磁盘空间和常规安装路径习惯,设置一些软链接,例如,

ln -s /opt/oracle/software/mysql7 /usr/local/mysql7


在/usr/local/mysql7中解压,mysql-5.7.32-el7-x86_64.tar.gz,完成安装,

tar zxvf mysql-5.7.32-el7-x86_64.tar.gz


如果其他机器,环境相同,需要安装MySQL,可以将此目录,直接复制到对应路径下,即可完成安装,和Oracle的克隆安装,有异曲同工之处。


无论是源码安装,还是二进制安装,此时我们就有了数据库软件,如果要操作这个数据库,还需要初始化创建数据库。


初始化数据库

1. 创建相关目录,授权用户mysql,

mkdir -p /mysql/3306/{data,tmp,binlog,log,backup,scripts}
chown -R mysql:mysql mysql


2. 配置用户.bash_profile

export LANG=zh_CN.GB18030
export PATH=/opt/mysql/mysql7/bin:$PATH


3. 配置参数文件,需切换到mysql用户,创建my.cnf,因为我会在这台机器创建5.7和8.0两个数据库,所以加了前缀3306,

su - mysql
cd /mysql/3306/
touch 3306_my.cnf


配置文件,我设置了这些初始化参数,

[client]
port=3306
socket=/mysql/3306/tmp/mysql.sock
[mysqld]
socket=/mysql/3306/tmp/mysql.sock
log_timestamps=system
user=mysql
server-id=1303306
port=3306
datadir=/mysql/3306/data/
basedir=/usr/local/mysql/
tmpdir=/mysql/3306/tmp
default-storage-engine=innodb
character_set_server=utf8mb4
pid-file=/mysql/3306/tmp/mysql.pid
log-error=/mysql/3306/log/mysql-error.log
log-bin=/mysql/3306/log/mysql-bin
long_query_time=2
slow_query_log =1
slow_query_log_file=/mysql/3306/log/slow.log
explicit_defaults_for_timestamp
federated
[mysql]
default-character-set=utf8mb4
prompt="\u@db1 \R:\m:\s [\d]> "
no-auto-rehash


4. 初始化数据库

/usr/local/mysql7/bin/mysqld --defaults-file=/mysql/3306/3306_my.cnf --initialize --user=mysql


5. 启动数据库服务

/usr/local/mysql7/bin/mysqld_safe --defaults-file=/mysql/3306/3306_my.cnf &


6. 登录数据库

有时登录数据库,会提示这个错误,提示没找到sock文件,

mysql -uroot -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)


实际这个sock在配置文件中配置了,不太清楚为什么有时候就是不生效,作为替代方案,可以创建软链接,模拟存在,

ln -s /mysql/3306/tmp/mysql.sock /tmp/mysql.sock


初始登录数据库,需要使用密码,从5.7开始,初始化的密码,可以从日志mysql-error.log得到,

2021-02-06T00:28:02.454667+08:00 1 [Note] A temporary password is generated for root@localhost: eS<ol9SDoskc


登录数据库,会提示需要立即修改密码,否则不能进行其他的操作,有的教程说使用password()函数,但会提示warning,指出这个函数,即将废弃,

set password=password('root');
show warnings;
'SET PASSWORD = PASSWORD('<plaintext_password>')' is deprecated and will be removed in a future release. Please use SET PASSWORD = '<plaintext_password>' instead


可以改为直接输入文本,

set password='root';


设置密码不过期,刷新权限,

alter user root@localhost password expire never;
flush privileges;


此时,数据库就可以使用了。


从丙洋老师的《涂抹MySQL》书中,还学到了几个实用的脚本,借鉴于此。


1. 配置文件,mysql7_env.ini

# set env
MYSQL_USER=root
MYSQL_PAS='root'
# check parameter
if [ $# -ne 1 ]
then
        HOST_PORT=3306
else
        HOST_PORT=$1
fi


2. 数据库服务启动脚本,mysql7_db_startup.sh

可以增加参数,启动多个数据库,默认启动的是3306的数据库,

#!/bin/sh
# Created by bisal @20210207
source /mysql/scripts/mysql7_env.ini
echo "Startup MySQL5.7 Service: localhost_"${HOST_PORT}
/usr/local/mysql7/bin/mysqld_safe --defaults-file=/mysql/${HOST_PORT}/${HOST_PORT}_my.cnf &


3. 数据库服务停止脚本,mysql7_db_shutdown.sh

可以增加参数,停止多个数据库,默认停止的是3306的数据库,

#!/bin/sh
# Created by bisal @20210207
source /mysql/scripts/mysql7_env.ini
echo "Shutdown MySQL Service: localhost_"${HOST_PORT}
/usr/local/mysql7/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PASS} -S /mysql/${HOST_PORT}/tmp/mysql.sock shutdown


4. 数据库登陆脚本,mysql7plus.sh

这个非常方便,一键登录,默认登录的是3306的数据库,

#!/bin/sh
# Created by bisal @20210207
source /mysql/scripts/mysql7_env.ini
echo "Login MySQL Service: localhost_"${HOST_PORT}
/usr/local/mysql7/bin/mysql -u${MYSQL_USER} -p${MYSQL_PASS} -S /mysql/${HOST_PORT}/tmp/mysql.sock $2


如果要是更方便,可以将上述脚本路径加到PATH中,用唯一的脚本名称在任意路径下都可执行。


MySQL 8.0的二进制安装和上述5.7基本一致,只是相关路径,需要改下名称,例如,

数据库软件路径,/usr/local/mysql8
数据库路径,/mysql/3307


因为一台机器上,有多个数据库,增加一个脚本,ps_mysql.sh,可以查询mysql的进程信息(增加参数,可以查询其他的进程),便于了解当前系统运行的MySQL数据库进程,

#!/bin/sh
# Created by bisal @20210207
if [ $# -ne 1 ]
then
        echo "Execute ps mysql"
        ps -ef | grep mysql | grep -v grep
else
        echo "Execute ps "$1
        ps -ef | grep $1 | grep -v grep
fi


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
499 158
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1256 152
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
931 156
|
7月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
525 156
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
753 6
|
7月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
7月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
7月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
7月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
831 7
|
7月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多