抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

MySQL安装

简介

​ MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

​ MySQL是一个开源的关系型数据库,是最受欢迎的开源软件之一,现在很多网站的数据库都是使用MySQL。 目前是被Oracle收购了。由于开源,很多有想法和有能力的人就会进行改造,使其更适合自己的环境需要,因此MySQL有了一些分支。

分支

主流分支版本

​ MySQL最开始是由瑞典MySQL AB公司开发;在2008年的时候,MySQL就被Sun公司收购了;Oracle公司在2009年的时候收购了Sun公司,很重要的原因就是为了MySQL。就这样子MySQL官方版本就是Oracle的了。

优势

​ 官方版本

MariaDB

​ 在Sun公司收购MySQL的时候,一些创始人和主要的工程就MySQL公司成立新的公司SkySQL;在Oracle公司收购MySQL的时候,同样有一批高层离开,创立新公司Monty Program Ab(MariaDB的母公司)。2013年4月,Monty Program Ab 和 SkySQL 宣布 两家公司将合并提供 MariaDB 的支持和开发。

优势
  1. 在server端加强;
  2. 支持更多的引擎
Percona server for MySQL

​ Percona Server为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提升。该版本提升了在高负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。

优势:
  1. 聚焦在innodb引擎,增加了很多性能相关补丁;

  2. 在server层改造不多,但增加了很多易管理性的补丁

其他的分支版本

Innosqll:网易开发的性能可靠性得到加强

Drizzle:高效的内存使用,专为多CPU/多核设计

Webscaleesql:Facebook、谷歌、LinkedIn、以及Twitter合作成果专攻海量数据

MySQL的重要性

https://db-engines.com/en/ranking

​ 在所有数据库中,MySql排在第二,而nosql中mongodb排在第一,你可能在想是不是有必要把Oracle也学习下,别着急,再看张图

​ 全球访问量最大的20家网站,他们分别使用了什么数据库呢,绝大多数使用mysql,有两个完整live.com和bing使用的是mssql,并不是他们使用不了mysql,而是他要支持自己的数据库。

​ 在国外可能挺多使用mssql或者oracle的,但是在过能,在去IOE的大背景下,包括银行在内的很多传统公司慢慢都在像mysql转型,不过其中有个老大不掉的公司,中国电力,依然使用oracle,在十年的时间仅仅在oracle的使用上,中国电力就支出390几个亿,平均一年30,40个亿,它有钱,如果你所在公司随随便便也能拿个几百个亿,那你也用oracle吧。

MySQL安装

windows 安装

绿色安装

有时候需要本地开发的时候需要绿色安装

下载Mysql

官网下载地址:https://dev.mysql.com/downloads/mysql/

鼠标滑下来,找到Other Download中的 Windows (x86, 64-bit), ZIP Archive,点击其右边的Download按钮进行Mysql下载

点击No thanks,just start my download即可进行Mysql下载

解压

下载完之后,解压安装包,解压路径随意(这里我解压到D:\Program Files\mysql中),在解压好的mysql-8.0.12-winx64文件夹中,新建一个空的data文件夹(注意这里的data文件夹必须是空的

配置my.ini

由于官网从5.7.18开始之后都不在二进制包中提供my-default.ini文件,所以这就需要我们自行创建一个my.ini文件(如果有my-default.ini文件,复制一份,把名称修改成my.ini 即可)

在把下面的配置信息复制到my.ini文件中

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
33
34
35
36
37
38
39
40
41
42
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

[mysqld]
#skip-grant-tables
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
basedir ="D:\Program Files\mysql" # 设置mysql的安装目录
datadir ="D:\Program Files\mysql\data" # 设置mysql数据库的数据的存放目录,必须是data,或者是//xxx/data


# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#服务端的编码方式
character-set-server=utf8mb4
[client]
#客户端编码方式,最好和服务端保存一致
loose-default-character-set=utf8mb4

[WinMySQLadmin]
Server = "D:\Program Files\mysql\bin\mysqld.exe" # 设置你自己 mysql数据库的mysqld.exe文件的存放目录

这里有三处地方需要修改成你的mysql安装目录

  • basedir = “D:\Program Files\mysql” # 设置你自己 mysql的安装目录

  • datadir = “D:\Program Files\mysql\data” # 设置你自己 mysql数据库的data文件夹的存放目录,必须是data

  • Server = “D:\Program Files\mysql\bin\mysqld.exe” # 设置你自己 mysql数据库的mysqld.exe文件的存放目录

配置Mysql的运行环境

选中 我的电脑 → 鼠标右键 → 属性(R) → 高级系统设置 → 环境变量(N) 进行环境配置

点击环境变量

在系统变量中找到Path变量,点击编辑(I)按钮

点击新建(N)按钮,输入你刚刚安装Mysql中bin文件夹的路径,例如:我的bin文件夹的路径是 D:\Program Files\mysql\bin,再点击确定

初始化mysql

管理员身份打开“命令行窗口”,输入命令 mysqld –initialize-insecure –user=mysql

1
mysqld  --initialize

这里会生成data文件夹,如果报错,可能是my.ini错误,使用下面命令

1
mysqld –initialize-insecure –user=mysql 

执行这条命令需要花一定的时间(大概几秒,根据电脑情况),不会有返回结果,但是可以在MySQL的安装目录下看到,原本为空的data文件夹里面有了许多文件和文件夹

注意如果data目录没有mysql等文件夹说明初始化失败,需要执行mysqld --initialize,进行初始化否则mysql会启动失败

添加到服务

管理员身份打开“命令行窗口”,输入命令 mysqld -install

当看到Service successfully installed时,表示Mysql服务添加成功

启动mysql服务

管理员身份打开“命令行窗口”,输入命令net start mysql,启动Mysql服务

登录mysql

以管理员身份打开“命令行窗口”,输入mysql -uroot -p并按下回车键

登录mysql后,修改密码(默认密码为空)

在弹出Enter password: 时,继续按下回车键,即可登录mysql

修改密码

输入命令 use mysql;

输入命令ALTER USER ‘root‘@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘新密码’; (注意末尾要有分号)

例如 ALTER USER ‘root‘@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘root’;

输入命令flush privileges; 刷新数据库

输入命令exit; 退出窗口

1
2
3
4
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
flush privileges;
exit;

卸载
关闭mysql服务

管理员身份打开“命令行窗口”,输入命令net stop mysql,启动Mysql服务

​ 关闭服务可以使用命令行,也可以在「任务管理器」的「服务」里进行关闭,也可以用命令行关闭

删除Mysql的注册表

进入注册表

Win+R打开运行界面,在输入框中输入 regedit 进入系统注册表窗口

删除注册表的键

分别在以下目录中找到 MySQL 的注册表,鼠标右键直接删除MySQL目录中的 EventMessageFile 和 TypesSupported 两个文件就好了,如果对应的目录中没有,就不用删除了,也可以搜索注册表: 在系统注册表窗口选择「编辑」 — 选择「查找」 — 输入 「MySQL」进行查找,将找到的MySQL目录中的 EventMessageFile 和 TypesSupported 两个文件进行删除

1
2
3
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application/MySQL

移除Mysql服务

  1. 以管理员身份使用命令行(cmd)进入MySQL的 bin 目录下

  2. 执行移除 MySQL服务的命令 : mysqld -remove

  3. 当看到有Service successfully removed时,则表示移除Mysql服务成功

LINUX 安装

准备工作

​ Linux 使用的版本是centos 7,为方便起见,先把防火墙关闭,配置好网络,在安装部分,会分成两部分讲,首先讲单实例安装,也就是一台服务器上就装一个mysql,接下来就多实例安装,在一个服务器上安装2个甚至多个mysql。

单实例安装
安装需要的依赖
1
yum install -y libaio
下载MySQL

通过一下路径下载mysql

1
wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz
解压文件

将mysql解压后并转移到/usr/local/目录 并重命名为mysql-5.7.11

1
2
sudo tar -zxvf mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz
sudo cp -r mysql-5.7.9-linux-glibc2.5-x86_64 /usr/local/mysql
建立软链接
1
2
3
cd /usr/local/mysql
sudo ln -s /usr/local/mysql-5.7.9-linux-glibc2.5-x86_64 mysql
mkdir data

添加用户与组
1
2
3
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql /usr/local/mysql
创建配置文件及相关目录

修改配置文件:/etc/my.cnf,配置不对的话,后面初始化不全,会拿不到默认密码。

修改my.cnf

vi /etc/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
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
socket=/tmp/mysql.sock

symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/tmp/mysqld/mysqld.pid
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server_id=1
max_connections=1000

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

:wq! 保存退出。

创建sock文件

创建 /tmp/mysql.sock

设置用户组及用户,授权

1
2
3
4
5
6
7
cd /tmp
# 创建mysql.sock文件
touch mysql.sock
#授权用户组
chown mysql:mysql mysql.sock
#分配mysql.sock执行权限
chmod 755 mysql.sock

创建文件pid文件

创建文件/tmp/mysqld/mysqld.pid

1
2
3
4
5
6
7
mkdir mysqld
cd mysqld
touch mysqld.pid
cd …
chown -R mysql:mysql mysqld
cd mysqld
chmod 755 mysqld.pid

创建日志文件

创建文件/var/log/mysqld.log

1
2
3
4
touch /var/log/mysqld.log
chown -R mysql:mysql /var/log
cd log
chmod 755 mysqld.log
初始化数据库
1
2
cd /usr/local/mysql/bin/
./mysqld --initialize --user=mysql --basedir=/usr/local/src/mysql5.7 --datadir=/usr/local/src/mysql5.7/data
启动数据库
1
./mysqld --user=mysql &

是否启动成功,可以通过查看mysql进程,ps -ef | grep mysql

查看MySql密码

默认密码在mysqld.log日志里

1
cat /var/log/mysqld.log

登录mysql

拷贝或者输入mysqld.log中获得的默认密码,执行登录命令,即可进入mysql命令客户端。

1
2
cd /usr/local/mysql/bin/
./mysql -u root -p
修改密码

修改密码 为 123456

1
mysql> set password=password(“123456”);

设置远程登录权限
1
mysql>grant all privileges on . to 'root'@'%' identified by '123456'

立即生效

1
mysql> flush privileges;

退出quit 或者 exit

1
mysql> quit;
开机服务启动设置

把support-files/mysql.server 拷贝为/etc/init.d/mysql

1
cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
查看是否拷贝成功
1
ll /etc/init.d/

注册为开机启动

把mysql注册为开机启动的服务

1
2
chkconfig --add mysql
chkconfig --list mysql
启动服务
1
service mysql start
创建快捷方式

服务启动后,直接运行mysql -u root -p即可登录,不需要进入到对应的目录

1
ln -s /usr/local/mysql/bin/mysql /usr/bin
多实例安装

以前一些很low的方法是,解压两个mysql,分别放到不同文件夹,其实在mysql中已经考虑到了多实例安装的情况。也有相应的脚本命令的支持。

现在要求装两个mysql 一个3307,3308

安装依赖包(非必须)
1
yum -y install make gcc-c++ cmake bison-devel ncurses-devellibaio libaio-devel
解压

解压到/usr/local/ 下面, 更名mysql

1
2
3
cp /soft/mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz  /usr/local/
tar xzvf mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz
mv /usr/local/mysql-5.7.9-linux-glibc2.5-x86_64 /usr/local/mysql
修改配置文件

vi /etc/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

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /var/log/mysqld_multi.log

[mysqld1]
server-id = 11
socket = /tmp/mysql.sock1
port = 3307
datadir = /data1
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
skip_name_resolve = 1
log_error = error.log
pid-file = /data1/mysql.pid1

[mysqld2]
server-id = 12
socket = /tmp/mysql.sock2
port = 3308
datadir = /data2
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
skip_name_resolve = 1
log_error = error.log
pid-file = /data2/mysql.pid2
添加用户与组
1
2
3
4
groupadd mysql
useradd mysql -g mysql
chown -R mysql:mysql mysql/
chmod -R 755 mysql/
创建软连接
1
2
3
4
shell> ln -s /usr/local/mysql-5.7.9-linux-glibc2.5-x86_64 mysql
shell> cd mysql
shell> mkdir mysql-files
shell> chmod 770 mysql-files
数据目录赋权

创建2个数据目录并赋权限

1
2
3
4
mkdir /data1
mkdir /data2
chown mysql.mysql /data1
chown mysql.mysql /data2
初始化数据库

初始化各个实例,初始化完后会在日志中生成密码,记得保存,一会要用。

1
2
3
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data1

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data2
开启各实例的SSL连接
1
2
3
/usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data1

/usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data2
添加环境变量

在文件最后面添加内容

1
2
3
4
5
6
7
vi /etc/profile

## SETUP MYSQL’S PATH

export MYSQL_HOME=/usr/local/mysql

export PATH=${MYSQL_HOME}/bin:$PATH

使修改的配置文件生效

1
source /etc/profile
配置开机启动

复制多实例脚本到服务管理目录下

1
cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multid

给予脚本可执行权限

1
chmod +x /etc/init.d/mysqld_multid

加入service服务管理

1
chkconfig --add mysqld_multid

显示服务列表

1
chkconfig --list

如果3,4,5都是开的就说明是自启设置成功。没有的话,就执行

1
chkconfig --level 345 mysqld_multid on
查看状态
1
/etc/init.d/mysqld_multid report

安装perl环境

这个时候发现还需要perl的环境,安装

1
yum -y install perl perl-devel

执行结果

1
2
3
4
5
6
7
/etc/init.d/mysqld_multid report

Reporting MySQL servers

MySQL server from group: mysqld1 is not running

MySQL server from group: mysqld2 is not running
linux运维

附加介绍一下Linux系统的运行级的概念

Linux OS 将操作 环境分为以下7个等级,即:

0:关机

1:单用户模式(单用户、无网络)

2:无网络支持的多用户模式(多用户、无网络)

3:有网络支持的多用户模式(多用户、有网络)

4:保留,未使用

5:有网络支持有X-Window支持的多用户模式(多用户、有网络、X-Window界面)

6:重新引导系统,即重启

启动各个实例
1
2
3
4
5
mysqld_multi start
/etc/init.d/mysqld_multid report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
查看实例的监听端口
1
ss -tulpn|grep mysqld

连接实例
1
mysql -u root -S /tmp/mysql.sock1 -p -P3307

修改密码

分别修改密码

1
set password = '123456%';
允许远程连接mysql
1
2
3
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456%';

flush privileges;

其中,root 是用户名,% 表示所有人都可以访问,password是密码。

最后测试查询
1
2
3
mysql> use mysql; 

mysql> select Host,User,max_user_connections,password_last_changed,account_locked from user;

第二个MySQL节点3308,设置如下

1
2
3
4
5
6
7
mysql -u root -S /tmp/mysql.sock2 -p -P3308(同上)

set password = '123456%';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ''123456%' WITH GRANT OPTION;

flush privileges; 

CentOS7 防火墙设置

CentOS7 使用firewalld代替了原来的iptables,使用方法如下:

关闭防火墙

1
2
3
systemctl stop firewalld.service            #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

开启端口

1
2
3
4
5
6
7
firewall-cmd --zone=public --add-port=80/tcp --permanent

命令含义

--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

重启防火墙

1
firewall-cmd --reload

其他常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
firewall-cmd --state                          ##查看防火墙状态,是否是running

firewall-cmd --reload                          ##重新载入配置,比如添加规则之后,需要执行此命令

firewall-cmd --get-zones                      ##列出支持的zone

firewall-cmd --get-services                    ##列出支持的服务,在列表中的服务是放行的

firewall-cmd --query-service ftp              ##查看ftp服务是否支持,返回yes或者no

firewall-cmd --add-service=ftp                ##临时开放ftp服务

firewall-cmd --add-service=ftp --permanent    ##永久开放ftp服务

firewall-cmd --remove-service=ftp --permanent  ##永久移除ftp服务

firewall-cmd --add-port=80/tcp --permanent    ##永久添加80端口 

iptables -L -n                                ##查看规则,这个命令是和iptables的相同的

man firewall-cmd                              ##查看帮助

更多命令,使用 firewall-cmd –help 查看帮助文件

CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下

使用iptables

直接关闭防火墙
1
2
systemctl stop firewalld.service          #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
设置 iptables service
1
yum -y install iptables-services

如果要修改防火墙配置,如增加防火墙端口3306

1
vi /etc/sysconfig/iptables 
增加规则
1
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
保存退出后
1
2
3
systemctl restart iptables.service #重启防火墙使配置生效

systemctl enable iptables.service #设置防火墙开机启动

最后重启系统使设置生效即可。

评论