MySQL-数据库简介及mysql5.7安装

一、mysql数据库介绍

1.1、简介

1)MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。

2)MySQL的历史最早可以追溯到1979年,那时Oracle也才刚刚开始,微软的SQL Server影子都没,在2008年1月16号 MySQL被Sun公司收购。2009年,SUN又被Oracle收购

3)体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得许多企业选择了MySQL作为数据库

1.2、官网介绍

1)主页https://www.oracle.com/mysql/index.html

2)下载主页面https://www.mysql.com/downloads/

3)社区资源下载页面https://dev.mysql.com/downloads/

4)MySQL社区版下载页面https://dev.mysql.com/downloads/mysql/

image

1.3、mysql相关产品介绍

1)Oracle MySQL Cloud Service (commercial):商业付费软件,基于MySQL企业版和Oracle云服务提供企业级 的MySQL数据库服务
2)MySQL Enterprise Edition(commercial):商业付费软件,除了提供MySQL数据库服务之外,又包含了connector(程序连接接口),partition(表分区),企业级的monitor(监控),HA(高可用),backup(备份),Scalability(扩展)等服务
3)MySQL Cluster CGE(commercial):商业付费软件,基于MySQL Cluster和企业版拥有的各项功能提供企业级的高并发 、高吞吐的数据库服务
4)MySQL Community Edition:免费社区软件,提供基础的数据库服务和其他衍生服务
5)MySQL Community Server:最流行的开源数据库管理软件,当前最新版本是8.0
6)MySQL Cluster:基于MySQL数据库而实现的集群服务,自身能提供高并发高负载等特性
7)MySQL Fabric:MySQL官方提供的关于MySQL数据库高可用和数据分片的解决方案
8)MySQL Connectors:为应用程序提供JDBC/ODBC等访问MySQL数据库的接口服务

1.4、社区版个版本区别

MySQL4.0版本:增加了子查询的支持,字符集增加UTF-8,GROUP BY语句增加了ROLLUP,mysql.user表采用了更好的加密算法,InnoDB开始支持单独的表空间
MySQL5.0版本:增加了Stored procedures、Views、Cursors、Triggers、XA transactions的支持,增加了INFORATION_SCHEMA系统数据库
MySQL5.5版本:默认存储引擎更改为InnoDB,提高性能和可扩展性,增加半同步复制
MySQL5.6版本:提高InnoDB性能,支持延迟复制
MySQL5.7版本:提升数据库性能和存储引擎,更健壮的复制功能,增加sys系统库存放数据库管理信息

二、mysql5.7安装

2.1、安装前准备

1)检查操作系统和MySQL版本的适配度

2)选择安装的MySQL版本

  • 首先判断是否要和公司其他已经安装好的MySQL保持版本一致
  • 如果没有上述要求,则一般会安装最新版本(目前是5.7)
  • 如果不是实验新功能性质,则不要选择development release,而要安装General Availability (GA) release(代表稳定版本,可在生产系统使用

3)选择安装MySQL的方式

  • 二进制安装包的方式(RPM,ZIP,Tar等)
  • 源码方式(source code)

一般会选择二进制安装方式,如果有特殊需求,比如修改一部分源码或修改MySQL深层次的配置,则会选择源码方式

2.2、二进制安装mysql5.7

1)进入安装目录,上传mysql5.7二进制安装包

[root@db01 ~]# cd /usr/local/
[root@db01 local]# ll mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 
-rw-r--r-- 1 mysql mysql 641127384 Jan 27  2019 mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

2)解压二进制安装包,并命名mysql

[root@db01 local]# tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 
[root@db01 local]# mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql

3)创建mysql用户及组

[root@db01 local]# groupadd mysql
[root@db01 local]# useradd mysql -g mysql

4)创建mysql的data目录,并授权

[root@db01 local]# cd /usr/local/mysql/
[root@db01 mysql]# mkdir data
[root@db01 mysql]# chown -R mysql.mysql /usr/local/mysql
[root@db01 mysql]# ll /usr/local/mysql
total 36
drwxr-xr-x  2 mysql mysql  4096 Oct  5 17:19 bin
-rw-r--r--  1 mysql mysql 17987 Sep 13  2017 COPYING
drwxr-xr-x  2 mysql mysql     6 Oct  5 17:20 data
drwxr-xr-x  2 mysql mysql    55 Oct  5 17:19 docs
drwxr-xr-x  3 mysql mysql  4096 Oct  5 17:19 include
drwxr-xr-x  5 mysql mysql   229 Oct  5 17:19 lib
drwxr-xr-x  4 mysql mysql    30 Oct  5 17:19 man
-rw-r--r--  1 mysql mysql  2478 Sep 13  2017 README
drwxr-xr-x 28 mysql mysql  4096 Oct  5 17:19 share
drwxr-xr-x  2 mysql mysql    90 Oct  5 17:19 support-files

5)初始化mysql,记住临时密码

[root@db01 mysql]# bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data
2019-10-05T09:34:35.351239Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-10-05T09:34:36.234993Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-10-05T09:34:36.326759Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-10-05T09:34:36.386932Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 5874e7c6-e753-11e9-91e7-000c29db13e4.
2019-10-05T09:34:36.388725Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-10-05T09:34:36.389921Z 1 [Note] A temporary password is generated for root@localhost: Nj1ojjql/)f<

#报错:bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决方法:yum install libaio -y

初始化方式

#1、初始化数据,初始化管理员的临时密码
/app/mysql/bin/mysqld --initialize  --user=mysql --basedir=/app/mysql --datadir=/data/mysql

5.7开始,MySQL加入了全新的 密码的安全机制:
1.初始化完成后,会生成临时密码(显示到屏幕上,并且会往日志中记一份)
2.密码复杂度:长度:超过12位? 复杂度:字符混乱组合
3.密码过期时间180天

#2、初始化数据,初始化管理员的密码为空
/app/mysql/bin/mysqld --initialize-insecure  --user=mysql --basedir=/app/mysql --datadir=/data/mysql

#5.6初始化
/application/mysql/mysql/scripts/mysql_install_db  --user=mysql --datadir=/application/mysql/mysql/mydata --basedir=/application/mysql/mysql

6)更改配置文件(默认配置文件为maraidb的,删除或备份即可)

[root@db01 mysql]# mv /etc/my.cnf{,.bak}

7)通过命名启动mysql

[root@db01 mysql]# bin/mysqld_safe --datadir=/usr/local/mysql/data --user=mysql &

[root@db01 mysql]# ps -ef|grep mysql
root       1733   1633  0 17:37 pts/0    00:00:00 /bin/sh bin/mysqld_safe --datadir=/usr/local/mysql/data --user=mysql
mysql      1818   1733  1 17:37 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=db01.err --pid-file=db01.pid
root       1848   1633  0 17:37 pts/0    00:00:00 grep --color=auto mysql

8)配置环境变量

[root@db01 mysql]# vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
[root@db01 mysql]# source ~/.bash_profile

9)拷贝启动文件到/etc/init.d/,开机自启动

[root@db01 mysql]# cp support-files/mysql.server /etc/init.d/

10)登录mysql,使用临时密码

[root@db01 mysql]# mysql -uroot -p
Enter password:    #临时密码

11)修改密码

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> set password=password('mysql');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

12)重新登录mysql,密码为mysql

[root@db01 mysql]# mysql -uroot -pmysql
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 4
Server version: 5.7.20 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> select user,host from mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

三、mysql5.7数据目录结构

3.1、建库结构变化

执行create database语句后,会在数据目录下生成一个文件夹

mysql> create database course;

[root@ db01 ~]# cd /usr/local/mysql/data/
[root@ db01 data]# ll
total 122944
-rw-r----- 1 mysql mysql       56 Feb  5 13:48 auto.cnf			#UUID(创建mysql集群是有用)
drwxr-x--- 2 mysql mysql       20 Feb  9 20:55 course			#创建的每一个数据库都会生成一个对应的文件夹
-rw-r----- 1 mysql mysql      313 Feb  5 14:04 ib_buffer_pool	
-rw-r----- 1 mysql mysql 12582912 Feb  9 20:05 ibdata1			#共享表空间信息
-rw-r----- 1 mysql mysql 50331648 Feb  9 20:05 ib_logfile0		#日志相关
-rw-r----- 1 mysql mysql 50331648 Feb  5 13:48 ib_logfile1      #日志相关
-rw-r----- 1 mysql mysql 12582912 Feb  9 20:05 ibtmp1			#临时表存放
drwxr-x--- 2 mysql mysql     4096 Feb  5 13:48 mysql
-rw-r----- 1 mysql mysql    24429 Feb  9 20:05  db01.err		#错误日志
-rw-r----- 1 mysql mysql        5 Feb  9 20:05  db01.pid		#pid文件
drwxr-x--- 2 mysql mysql     8192 Feb  5 13:48 performance_schema
drwxr-x--- 2 mysql mysql     8192 Feb  5 13:48 sys

3.2、建表结构变化

mysql> use course;
Database changed
mysql> create table tmp(id int);
Query OK, 0 rows affected (0.02 sec)
[root@ db01 data]# cd course/
[root@ db01 course]# ll
total 112
-rw-r----- 1 mysql mysql    65 Feb  9 20:55 db.opt		#字符集及排序规则(创建数据库后自动生成)
-rw-r----- 1 mysql mysql  8556 Feb  9 20:58 tmp.frm		#表结构信息
-rw-r----- 1 mysql mysql 98304 Feb  9 20:58 tmp.ibd		#数据信息,索引信息

[root@ db01 course]# cat db.opt 
default-character-set=latin1
default-collation=latin1_swedish_ci

3.3、mysql库结构

[root@ db01 data]# cd mysql/
[root@ db01 mysql]# ls
columns_priv.frm   gtid_executed.ibd       proc.MYD                  slow_log.CSV
columns_priv.MYD   help_category.frm       proc.MYI                  slow_log.frm
columns_priv.MYI   help_category.ibd       procs_priv.frm            tables_priv.frm
db.frm             help_keyword.frm        procs_priv.MYD            tables_priv.MYD
db.MYD             help_keyword.ibd        procs_priv.MYI            tables_priv.MYI
db.MYI             help_relation.frm       proxies_priv.frm          time_zone.frm
db.opt             help_relation.ibd       proxies_priv.MYD          time_zone.ibd
engine_cost.frm    help_topic.frm          proxies_priv.MYI          time_zone_leap_second.frm
engine_cost.ibd    help_topic.ibd          server_cost.frm           time_zone_leap_second.ibd
event.frm          innodb_index_stats.frm  server_cost.ibd           time_zone_name.frm
event.MYD          innodb_index_stats.ibd  servers.frm               time_zone_name.ibd
event.MYI          innodb_table_stats.frm  servers.ibd               time_zone_transition.frm
func.frm           innodb_table_stats.ibd  slave_master_info.frm     time_zone_transition.ibd
func.MYD           ndb_binlog_index.frm    slave_master_info.ibd     time_zone_transition_type.frm
func.MYI           ndb_binlog_index.MYD    slave_relay_log_info.frm  time_zone_transition_type.ibd
general_log.CSM    ndb_binlog_index.MYI    slave_relay_log_info.ibd  user.frm
general_log.CSV    plugin.frm              slave_worker_info.frm     user.MYD
general_log.frm    plugin.ibd              slave_worker_info.ibd     user.MYI
gtid_executed.frm  proc.frm                slow_log.CSM

tables_priv.frm		#表结构信息
tables_priv.MYD		#表数据信息(myisam引擎)
tables_priv.MYI		#表索引信息(myisam引擎)    

四、mysql5.6与5.7小区别(持续)

4.1、用户信息相关

#5.6版本:
select user,password,host from mysql.user;

#5.7版本
select user,authentication_string,host from mysql.user;
desc  mysql.user;

mysql> select user,authentication_string,host from mysql.user;
+---------------+-------------------------------------------+-----------+
| user          | authentication_string                     | host      |
+---------------+-------------------------------------------+-----------+
| root          | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
+---------------+-------------------------------------------+-----------+
3 rows in set (0.00 sec)

mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

五、root密码忘记处理

5.1、停数据库

[root@db01 mysql]# /etc/init.d/mysql.server stop
Shutting down MySQL.. SUCCESS!

5.2、跳过授权表启动数据库

[root@db01 mysql]# mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking  &

[root@db01 mysql]# ps -ef|grep mysql
root       2775   1633  0 18:23 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking
mysql      2865   2775  2 18:23 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=db01.err --pid-file=db01.pid
root       2895   1633  0 18:23 pts/0    00:00:00 grep --color=auto mysql

#参数说明
--defaults-file=/etc/my.cnf		#指定配置文件(要写在前面)
--skip-grant-tables     		#跳过授权表(mysql.user)
--skip-networking       		#跳过网络用户连接

5.3、直接mysql登录数据库修改密码

方式一:

[root@db01 mysql]# mysql
mysql> flush privileges;  #需要先刷新授权表,否则下面的grant命令执行不成功
mysql> grant all on *.* to root@'localhost' identified by 'abc' with grant option;
mysql> q
Bye

#重启
[root@db01 mysql]# pkill mysqld
[root@db01 mysql]# /etc/init.d/mysql.server start
Starting MySQL. SUCCESS! 

#使用新密码登录
[root@db01 mysql]# mysql -uroot -pabc
mysql> 

如何不刷新授权表,会报错如下:

image

方式二:不推荐

[root@db01 mysql]# /etc/init.d/mysql.server stop
Shutting down MySQL.. SUCCESS! 
[root@db01 mysql]# mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking  &
[root@db01 mysql]# mysql
mysql> update mysql.user set authentication_string=PASSWORD('123') where user='root' and host='localhost';
mysql> q
Bye

[root@db01 mysql]# mysqladmin shutdown
[root@db01 mysql]# /etc/init.d/mysql.server start
Starting MySQL. SUCCESS! 

[root@db01 mysql]# mysql -uroot -p123
mysql> 

5.4、补充:将密码改为空

update mysql.user set authentication_string=PASSWORD('') where user='root' and host='localhost';
flush privileges;

#或者重启数据库也会生效。
#注意: mysql.user 在每次数据库启动时会自动加载到内存,如果使用update语句直接修改表内容,mysql不会立即将变化更新内存,需要手工触发。

六、MySQL启动相关参数

6.1、相关参数说明

basedir = /usr/local/mysql	#代表MySQL安装路径
datadir = /usr/local/mysql/data	#代表MySQL的数据文件路径
port = 3306	#指定MySQL的侦听端口
log-error=/usr/local/mysql/data/M00006.err	#记录MySQL启动日志和运行错误日志
bind-address	#(默认是*)*代表接受所有来自IPV4、IPV6主机网卡的TCP/IP连接,0.0.0.0代表接受所有来自IPV4主机网卡的TCP/IP的连接,指定的IP如127.0.0.1,代表只接受此地址请求的TCP/IP连接
character-set-server	#(默认是latin1)指定MySQL的字符集
collation-server	#(默认是latin1_swedish_ci)指定MySQL的排序规则
default-storage-engine	(默认是InnoDB)指定MySQL的默认存储引擎
default-time-zone	#指定默认时区,如果没有指定则和系统默认时区一致
open-files-limit	#(默认5000)指定Mysqld运行过程中可以打开的文件数,避免出现” Too many open files”报错
pid-file=/usr/local/mysql/data/M00006.pid	#指定Mysqld进程对应的程序ID文件,默认是在数据文件目录里
Skip-grant-tables	#指定避开MySQL内部的权限表启动服务
Tmpdir	#指定临时表文件的存放路径

6.2、示例:修改字符集及变更数据目录

#停库
[root@db01 mysql]# /etc/init.d/mysql.server stop

#移动数据目录
[root@db01 mysql]# mv /usr/local/mysql/data/ /data/
[root@db01 mysql]# ll /data/
total 0
drwxr-xr-x 6 mysql mysql 205 Oct  5 19:33 data

#编辑/etc/my.cnf
[root@db01 mysql]# cat /etc/my.cnf
[mysqld]
datadir = /data/data
port = 3306
character-set-server = utf8
collation-server = utf8_unicode_ci

#重启mysql
[root@db01 mysql]# ps -ef|grep mysql
root      20000      1  0 19:37 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/data --pid-file=/data/data/db01.pid
mysql     20144  20000  3 19:37 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=db01.err --pid-file=/data/data/db01.pid --port=3306
root      20174   1633  0 19:37 pts/0    00:00:00 grep --color=auto mysql

[root@db01 mysql]# mysql -uroot -pmysql
mysql> show variables like 'character_set_server%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_server | utf8  |
+----------------------+-------+
1 row in set (0.01 sec)

mysql> show variables like 'collation_server%';
+------------------+-----------------+
| Variable_name    | Value           |
+------------------+-----------------+
| collation_server | utf8_unicode_ci |
+------------------+-----------------+
1 row in set (0.00 sec)

七、mysql多实例配置

启动多个mysqld实例

  • 多个配置文件
  • 多个端口
  • 多套数据
  • 多个socket
  • 多个server_id

7.1、单实例配置

1)创建软件目录,上传软件至此目录

[root@mysql ~]# mkdir -p /app/
[root@mysql ~]# cd /app/
[root@mysql app]# ls
mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

2)解压并改名为mysql

[root@mysql app]# tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 
[root@mysql app]# mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql
[root@mysql app]# ll /app/mysql
total 36
drwxr-xr-x  2 root root   4096 Oct  5 21:32 bin
-rw-r--r--  1 7161 31415 17987 Sep 13  2017 COPYING
drwxr-xr-x  2 root root     55 Oct  5 21:32 docs
drwxr-xr-x  3 root root   4096 Oct  5 21:31 include
drwxr-xr-x  5 root root    229 Oct  5 21:32 lib
drwxr-xr-x  4 root root     30 Oct  5 21:32 man
-rw-r--r--  1 7161 31415  2478 Sep 13  2017 README
drwxr-xr-x 28 root root   4096 Oct  5 21:32 share
drwxr-xr-x  2 root root     90 Oct  5 21:32 support-files

3)建立mysql用户和组

[root@mysql app]# useradd mysql 

4)创建相关目录并修改权限

[root@mysql app]# mkdir /data/mysql -p 
[root@mysql app]# chown -R mysql.mysql /app/*
[root@mysql app]# chown -R mysql.mysql /data/*

5)初始化

[root@mysql app]# /app/mysql/bin/mysqld --initialize-insecure  --user=mysql --basedir=/app/mysql --datadir=/data/mysql

6)书写默认配置文件

[root@mysql app]# cat /etc/my.cnf
[mysqld]
basedir=/app/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log_error=/var/log/mysql.log
user=mysql
[client]
socket=/tmp/mysql.sock
prompt=[\d]>

7)创建日志文件并授权(易出错

[root@mysql app]# touch /var/log/mysql.log
[root@mysql app]# chown -R mysql.mysql /var/log/mysql.log

8)替换

[root@mysql app]# sed -i 's#mysqld_safe#mysqld#g' /app/mysql/support-files/mysql.server

9)启动

[root@mysql app]# /app/mysql/support-files/mysql.server start
Starting MySQL. SUCCESS! 
[root@mysql app]# ps -ef|grep mysql
mysql      1742      1  2 21:43 pts/0    00:00:00 /app/mysql/bin/mysqld --datadir=/data/mysql --pid-file=/data/mysql/mysql.pid
root       1775   1601  0 21:43 pts/0    00:00:00 grep --color=auto mysql

10)原始sys-v管理启动(方式一)

[root@mysql ~]# cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@mysql ~]# pkill mysql
[root@mysql ~]# ps -ef|grep mysql
root       1797   1601  0 21:44 pts/0    00:00:00 grep --color=auto mysql
[root@mysql ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

11)使用systemd管理mysql(方式二)

注意:将原来模式启动mysqld先关闭,然后再用systemd管理。

[root@mysql ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS! 

[root@mysql ~]# cat /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

[root@mysql ~]# systemctl start mysqld.service 
[root@mysql ~]# ps -ef|grep mysql
mysql      1893      1  3 21:46 ?        00:00:00 /app/mysql/bin/mysqld --defaults-file=/etc/my.cnf
root       1923   1601  0 21:46 pts/0    00:00:00 grep --color=auto mysql

12)配置环境变量

[root@mysql ~]# echo 'export PATH=/app/mysql/bin:$PATH' >> /etc/profile && source /etc/profile
[root@mysql ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 3
Server version: 5.7.20 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

[(none)]>

7.2、多实例配置

1)准备多个目录

[root@mysql ~]# mkdir -p /data/330{7,8,9}/data

2)准备配置文件

vim /data/3307/my.cnf
[mysqld]
basedir=/app/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7

---------------------------
vim /data/3308/my.cnf
[mysqld]
basedir=/app/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8

---------------------------
vim /data/3309/my.cnf
[mysqld]
basedir=/app/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9

3)初始化三套数据

[root@mysql ~]# mv /etc/my.cnf /etc/my.cnf.bak
[root@mysql ~]# mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/app/mysql
[root@mysql ~]# mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/app/mysql
[root@mysql ~]# mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/app/mysql

4)systemd管理多实例

cd /etc/systemd/system
cp mysqld.service mysqld3307.service 
cp mysqld.service mysqld3308.service 
cp mysqld.service mysqld3309.service 

vim mysqld3307.service 
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
vim mysqld3308.service 
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
vim mysqld3309.service 
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf

5)授权

[root@mysql system]# chown -R mysql.mysql /data/*

6)启动

[root@mysql system]# systemctl start mysqld3307.service 
[root@mysql system]# systemctl start mysqld3308.service 
[root@mysql system]# systemctl start mysqld3309.service 
[root@mysql system]# netstat -lnp|grep 330
tcp6       0      0 :::3307                 :::*                    LISTEN      2179/mysqld         
tcp6       0      0 :::3308                 :::*                    LISTEN      2186/mysqld         
tcp6       0      0 :::3309                 :::*                    LISTEN      2249/mysqld         
tcp6       0      0 :::3306                 :::*                    LISTEN      1979/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     25099    2186/mysqld          /data/3308/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     25100    2179/mysqld          /data/3307/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     25201    2249/mysqld          /data/3309/mysql.sock

[root@mysql system]# mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 7     |
+---------------+-------+
[root@mysql system]# mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 8     |
+---------------+-------+
[root@mysql system]# mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 9     |
+---------------+-------+

原文地址:https://www.cnblogs.com/hujinzhong/p/11624889.html