Oracle MySQL、MariaDB、Percona server

Select Platform:

二进制 rpm Yum Repository mysql57-community-release-el7-9.noarch.rpm

二进制 预编译  Generic mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz

源码包安装 Source Code mysql-5.7.19.tar.gz

探测mysql版本 mysql查版本_Server

安装环境
[root@mysql1 ~]# rpm -q mariadb-server
package mariadb-server is not installed

[root@mysql1 ~]# sed -ri ‘/^SELINUX=/c\SELINUX=disabled’ /etc/selinux/config
[root@mysql1 ~]# setenforce 0

方法一:二进制 rpm

http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html

        wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

        rpm -ivh  mysql57-community-release-el7-9.noarch.rpm
        yum -y install mysql-server
        mysql -uroot -p'123'
        show databases;

        [root@tianyun Downloads]# md5sum mysql57-community-release-el7-9.noarch.rpm
        [root@tianyun Downloads]# yum -y install mysql57-community-release-el7-9.noarch.rpm
        [root@git ~]# yum repolist
          Loaded plugins: fastestmirror
          Loading mirror speeds from cached hostfile
          repo id                                                                     repo name                               status
          base/7/x86_64                                                       CentOS-7 - Base                         10,019
          extras/7/x86_64                                                      CentOS-7 - Extras                          321
          mysql-connectors-community/x86_64              MySQL Connectors Community                  74
          mysql-tools-community/x86_64                           MySQL Tools Community                       74
          mysql57-community/x86_64                             MySQL 5.7 Community Server                 307
          updates/7/x86_64                                                  CentOS-7 - Updates                         628
          repolist: 11,423

        [root@git ~]# yum repolist all | grep mysql
        mysql-connectors-community/x86_64 MySQL Connectors Community     enabled:     74
        mysql-connectors-community-source MySQL Connectors Community - S disabled
        mysql-tools-community/x86_64      MySQL Tools Community               enabled:             74
        mysql-tools-community-source      MySQL Tools Community - Source disabled
        mysql-tools-preview/x86_64        MySQL Tools Preview                    disabled
        mysql-tools-preview-source           MySQL Tools Preview - Source   disabled
        mysql55-community/x86_64          MySQL 5.5 Community Server     disabled
        mysql55-community-source          MySQL 5.5 Community Server - S disabled
        mysql56-community/x86_64          MySQL 5.6 Community Server     disabled
        mysql56-community-source          MySQL 5.6 Community Server - S disabled
        mysql57-community/x86_64          MySQL 5.7 Community Server     enabled:          307
        mysql57-community-source          MySQL 5.7 Community Server - S disabled
        mysql80-community/x86_64          MySQL 8.0 Community Server     disabled
        mysql80-community-source          MySQL 8.0 Community Server - S disabled

       [root@git ~]# yum-config-manager --enable mysql56-community
       将此56的MySQL设置成开机自启动
       报错解决方式:
                   -bash: yum-config-manager: command not found
                   这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里。
                    yum -y install yum-utils
       
       [root@git ~]# yum repolist enabled | grep mysql
                mysql-connectors-community/x86_64       MySQL Connectors Community            74
                mysql-tools-community/x86_64            MySQL Tools Community                 74
                mysql56-community/x86_64                MySQL 5.6 Community Server           429
                mysql57-community/x86_64                MySQL 5.7 Community Server           307

        [root@mysql1 ~]# yum -y install mysql-community-server
        [root@mysql1 ~]# systemctl start mysqld                                 //第一次启动先初始数据库
        [root@mysql1 ~]# systemctl enable mysqld
        [root@mysql1 ~]# ls /var/lib/mysql
            auto.cnf            client-key.pem      ib_logfile1         mysql.sock.lock                  server-cert.pem
            ca-key.pem       ib_buffer_pool       ibtmp1             performance_schema          server-key.pem
            ca.pem             ibdata1                  mysql               private_key.pem                 sys
            client-cert.pem  ib_logfile0            mysql.sock          public_key.pem

 
        [root@mysql ~]# grep "password" /var/log/mysqld.log 
                2019-01-15T06:45:28.734665Z 1 [Note] A temporary password is generated for root@localhost: VFISQo_dt7Rt
                2019-01-15T06:47:41.765992Z 3 [Note] Access denied for user 'root'@'localhost' (using password: YES)
        [root@mysql ~]# mysql -uroot -p'VFISQo_dt7Rt'
                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 5
                Server version: 5.7.24 MySQL Community Server (GPL)

                Copyright (c) 2000, 2018, 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> 
              
                 mysql>   alter  user  'root'@'localhost' identified by "1qaz2WSX#";      修改密码
                 Query OK, 1 row affected (0.00 sec)
                 mysql> \q
                 Bye
                 
                 
                 
                 mysql> show databases;
                            +--------------------+
                            | Database           |
                            +--------------------+
                            | information_schema |
                            | mysql              |
                            | performance_schema |
                            | sys                |
                            +--------------------+
                            4 rows in set (0.01 sec)

                            mysql>

方法二:源码编译安装

探测mysql版本 mysql查版本_MySQL_02

网址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads ------->community---->Mysql Community Server ----->MySQL Community Server 5.7

mysql 5.7.24的tar包:https://dev.mysql.com/downloads/file/?id=481075

总的包https://dev.mysql.com/downloads/file/?id=481150

探测mysql版本 mysql查版本_mysql_03

1. 编译安装
[root@mysql1 ~]# yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make

cmake:
[root@mysql1 ~]# yum -y install cmake     跨平台安装工具

boost:
[root@mysql1 ~]# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz    c++库

wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

mysql:
[root@mysql1 ~]# groupadd mysql
[root@mysql1 ~]# useradd -r -g mysql -s /bin/false mysql
[root@mysql1 ~]# tar xvf mysql-5.7.19.tar.gz
[root@mysql1 ~]# cd mysql-5.7.19
[root@mysql1 mysql-5.7.19]# pwd
/root/mysql-5.7.19
解压boost文件
[root@mysql3 ~]# tar xf /root/boost_1_59_0.tar.gz
[root@mysql-5.7.19 ~]# cmake . \
-DWITH_BOOST=boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DINSTALL_MANDIR=/usr/share/man \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1

下面这个是一定会遇到的,只需加上下面的命令就可以了
提示:boost也可以使用如下指令自动下载
-DDOWNLOAD_BOOST=1

[root@mysql1 ~]# make
[root@mysql1 ~]# make install

2. 初始化
[root@mysql1 local]# cd mysql
[root@mysql1 mysql]# mkdir mysql-files
[root@mysql1 mysql]# chown -R mysql.mysql .
[root@mysql1 mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@mysql1 mysql]# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

建立MySQL配置文件my.cnf
[root@mysql1 mysql]# vim /etc/my.cnf
[mysqld]sys
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

启动MySQL

 ***centos6***
 
使用centos6 mysql.server脚本(system V)
[root@mysql1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@mysql1 mysql]# chkconfig --add mysqld
[root@mysql1 mysql]# chkconfig mysqld on
[root@mysql1 mysql]# service mysqld start
[root@mysql1 mysql]# service mysqld start
Starting MySQL.Logging to '/usr/local/mysql/data/mysql2.err'.
 SUCCESS! 
[root@mysql1 mysql]# ps aux |grep mysqld
mysql    76 pts/0  Sl   14:38   0: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=mysql2.err --pid-file=/usr/local/mysql/data/mysql2.pid

报错1:
启动的时候会遇到default-character-set=utf8mb4报错,将下面这个写入到/etc/my.cnf
default-character-set=utf8mb4

报错2:
root@MyServer:~# service mysql start
Starting MySQL
..The server quit without updating PID file (/usr/local/mysql/data/MyServer.pid). ... failed!
错误解决排查思路:
1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限
2.可能进程里已经存在mysql进程
3.实在不行就重新初始化


登陆数据库:
[root@MySQL ~]#  /usr/local/mysql/bin/mysql -uroot -p'zijz,Bsqe2<A'
        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 6
        Server version: 5.7.24

        Copyright (c) 2000, 2018, 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> show databases;
        ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
        mysql> alter user 'root'@'localhost' identified by '123' ;
        Query OK, 0 rows affected (0.00 sec)

        mysql> \q
        Bye

PATH[可选]
[root@mysql2 mysql]# mysql
-bash: mysql: command not found
[root@mysql2 mysql]# /usr/local/mysql/bin/mysql
[root@mysql1 mysql]# echo “export PATH=$PATH:/usr/local/mysql/bin” >> /etc/profile
[root@mysql1 mysql]# source /etc/profile
[root@mysql1 mysql]# mysqladmin -uroot -p’>>e4KKcol6i1’ password ‘(TianYunYang123)’

我们在安装mysql的时候可能会遇到这个问题:

探测mysql版本 mysql查版本_探测mysql版本_04


遇到这个说明我们已经初始化过数据库,我们需要重新初始化一下

如果需要重新初始化…[可选]
 [root@mysql1 ~]# killall mysqld
 [root@mysql1 ~]# rm -rf /usr/local/mysql/data
 [root@mysql1 mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
 [root@mysql1 mysql]# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/dataRPM or Yum:
 datadir: /var/lib/mysql
 源码包 和 预编译:
 basedir: datadir:
 /usr/local/mysql /usr/local/mysql/data

编译报错

cmake编译mysql出现如下错误:

探测mysql版本 mysql查版本_MySQL_05


解决方法:

安装ncurses-devel:yum -y install ncurses-devel(Debian/Ubuntu需安装libncurses5-dev)
删除CMakeCache.txt(该文件在mysql解压目录)
重新编译就可以了

忘记MySQL密码

MySQL 5.7.5 and earlier:

[root@mysql1 ~]# vim /etc/my.cnf					 
            [mysqld]
            skip-grant-tables                           跳过密码验证

            [root@mysql1 ~]# service mysqld restart
            [root@mysql1 ~]# mysql
            mysql> update mysql.user set password=password("123") where user="root" and host="localhost";   
            mysql> flush privileges;
            mysql> \q

            [root@mysql1 ~]# vim /etc/my.cnf						 
            [mysqld]
            #skip-grant-table
            [root@mysql1 ~]# service mysqld restart

MySQL 5.7.6 and later:

[root@slave1 ~]# vim /etc/my.cnf
            [mysqld]
            skip-grant-tables
            [root@slave1 ~]# systemctl restart mysqld


开始进入数据库进行相关的操作

添加新的密码后,退出数据库

探测mysql版本 mysql查版本_Server_06


[root@slave1 ~]# vim /etc/my.cnf
 删除添加的一行
 [root@slave1 ~]# systemctl restart mysqld
修改mysql root 密码
update mysql.user set authentication_string=password('123') where user='root';     键值(跳过密码验证后,重置数据库密码,建议大小写数字符号),有可能不成功是密码规则不符
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
错误1819 (HY000):您的密码不满足当前的策略要求

alter user user() identified by "1qaz2WSX#";                        修改数据库密码(符合密码规则)

flush privileges;           重新加载特权



修改完 密码后记得进入/etc/my.cnf 下去添加注释# 然后重启服务后,重新进入数据库。

mysqladmin -u root -p')vl*hfrZg3-t' password 'Qianfeng123!'   通过mysqladmin修改数据库密码

数据库的增删改查:

语法: CREATE DATABASE 数据库名;

数据库命名规则:
区分大小写
唯一性
不能使用关键字如 create select
不能单独使用数字

使用数据库并插入数据:

mysql> create table test1( test1 是数据库里的表 -> tinyint_test tinyint, tinyint数据类型
 -> int_test int
 -> );
 mysql> desc test1;
 ±-------------±-----------±-----±----±--------±------+
 | Field | Type | Null | Key | Default | Extra |
 ±-------------±-----------±-----±----±--------±------+
 | tinyint_test | tinyint(4) | YES | | NULL | |
 | int_test | int(11) | YES | | NULL | |
 ±-------------±-----------±-----±----±--------±------+
 2 rows in set (0.01 sec)
 mysql> insert into test1 values (111,111); 输入数值
 Query OK, 1 row affected (0.09 sec)
 mysql> insert into test1(tinyint_test) values(128);
 ERROR 1264 (22003): Out of range value for column ‘tinyint_test’ at row 1 超出这是类型的数值
 mysql> insert into test1(int_test) values(2147483647);
 Query OK, 1 row affected (0.05 sec)删除表和库:
 表:创建表 create table
 查看表结构 desc table, show create table
 表完整性约束
 修改表 alter table
 复制表 create table …
 删除表 drop table库
查看数据库:SHOW DATABASES;
 选择数据库:
 SELECT database();
 USE 数据库名
 use zhaohan
 删除数据库:DROP DATABASE 数据库名;
 mysql> drop database zhaohan;查询:
简单查询
 SELECT * FROM employee5;
 SELECT name, salary, dep_id FROM employee5;避免重复DISTINCT
 SELECT post FROM employee5;
 SELECT DISTINCT post FROM employee5; 去重
 注:不能部分使用DISTINCT,通常仅用于某一字段。通过四则运算查询
 SELECT name, salary, salary14 FROM employee5;
 SELECT name, salary, salary14 AS Annual_salary FROM employee5;
 SELECT name, salary, salary*14 Annual_salary FROM employee5;定义显示格式
 CONCAT() 函数用于连接字符串
 SELECT CONCAT(name, ’ annual salary: ', salary*14) AS Annual_salary FROM employee5;二、单条件查询

单条件查询
 SELECT name,post
 FROM employee5
 WHERE post=‘hr’;select name,post from employee5 where post=‘hr’;
多条件查询
 SELECT name,salary
 FROM employee5
 WHERE post=‘hr’ AND salary>10000;select name,salary post from employee5 where post=‘hr’ and salary >1000;
关键字BETWEEN AND
 SELECT name,salary FROM employee5
 WHERE salary BETWEEN 5000 AND 15000;SELECT name,salary FROM employee5
 WHERE salary NOT BETWEEN 5000 AND 15000;select name,salary from employee5 where salary not between 5000 and 15000;
关键字IS NULL
 SELECT name,job_description FROM employee5
 WHERE job_description IS NULL;SELECT name,job_description FROM employee5
 WHERE job_description IS NOT NULL;SELECT name,job_description FROM employee5
 WHERE job_description=" ";关键字IN集合查询
 SELECT name, salary FROM employee5
 WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000 ;SELECT name, salary FROM employee5
 WHERE salary IN (4000,5000,6000,9000) ;SELECT name, salary FROM employee
 WHERE salary NOT IN (4000,5000,6000,9000) ;关键字LIKE模糊查询
 通配符’%’
 SELECT * FROM employee5
 WHERE name LIKE ‘al%’;
 通配符’’
 SELECT * FROM employee5
 WHERE name LIKE 'al__’;三、查询排序
 按单列排序
 SELECT * FROM employee5 ORDER BY salary;
 SELECT name, salary FROM employee5 ORDER BY salary ASC; 从低到高一次排序
 SELECT name, salary FROM employee5 ORDER BY salary DESC; 从高到低一次排序按多列排序
 SELECT * FROM employee5
 ORDER BY hire_date DESC,
 salary ASC;

MySQL常用的存储引擎存储

引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。
用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

MyISAM存储引擎

由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。

InnoDB存储引擎

由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特性,所以比MyISAM存储引擎占用更多的磁盘空间。
因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建议选择。可以备份表和库。

MEMORY

MEMORY存储引擎存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。适合于需要快速的访问或临时表。是备份不了的,企业里是不使用的。

BLACKHOLE

黑洞存储引擎,可以应用于主备复制中的分发主库。

精讲:

1.InnoDB 从mysql 5.5版本开始,innodb是mysql默认的存储引擎。innodb具有以下优点
• 灾难恢复性好
• 支持事务,默认的事务隔离级别是可重复读,其事务控制是通过多版本并发控制来实现的。
• 使用行级锁
• 对于InnoDB引擎中的表, 其数据的物理组织形式是簇表(Cluster Table) , 数据按主键来组织, 也就是说主键索引和数据是在一起的, 数据按主键的顺序物理分布。 数据表的另一种常见形式是非簇表, 其索引是有序的, 而数据是无序的。
• 实现了缓冲管理, 不仅能缓冲索引也能缓冲数据, 并且会自动创建散列索引以加快数据的获取。 相比之下, MyISAM只是缓存了索引。
• 支持外键。
• 支持热备份

2.MyISAM引擎 • 可以配合锁, 实现操作系统下的复制备份、 迁移。
• 使用表级锁, 并发性差。
• 支持全文检索(MySQL InonoDB在5.6以后也支持全文检索) 。
• 主机宕机后, MyISAM表易损坏, 灾难恢复性不佳。
• 无事务支持。
• 只缓存索引, 数据的缓存是利用操作系统缓冲区来实现的。 可能引发过多的系统调用且效率不佳。
• 数据紧凑存储, 因此可获得更小的索引和更快的全表扫描性能。

3.MEMORY引擎 • MEMORY存储引擎提供“内存”表, 也不支持事务、 外键。
• 使用内存表(内存引擎) 可以显著提高访问数据的速度, 可用于缓存会频繁访问的、 可以重构的数据、 计算结果、 统计值、 中间结果, 但也有如下这些不足之处。
• 使用的是表级锁, 虽然内存访问快, 但如果频繁地读写, 表级锁可能会成为瓶颈所在。
• 只支持固定大小的行。 VARCHAR类型的字段会存储为固定长度的CHAR类型, 浪费空间。
• 不支持TEXT、 BLOB字段。 当有些查询需要使用到临时表(使用的也是MEMORY存储引擎) 时如果表中有TEXT、 BLOB字段, 那么会转化为基于磁盘的MyISAM表, 严重降低性能。
• 由于内存资源成本昂贵, 一般不建议设置过大的内存表, 如果内存表满了, 就会在MySQL错误日志里发现类似“Thetable‘table_name’is full”这样的错误, 可通过清除数据或调整内存表参数来避免报错。
• 服务器重启数据会丢失

4.ARCHIVE引擎 • ARCHIVE存储引擎是被设计用来存储企业中的大量流水数据的存储引擎。 ARCHIVE引擎使用zlib无损数据压缩, 让数据都保存在压缩的存档表中。 当数据被插入时, 它们被压缩。
• 它只支持INSERT和SELECT, 支持自增键及其上的索引, 不支持其他索引。 它适合做日志记录、 用户行为分析, 不需要UPDATE、 DELETE和索引的数据

授权:

远程连接MySQL

示例:
 mysql -h192.168.5.240 -P 3306 -u root -p123 mysql -e ‘select user,host from user’
 -h 指定主机名 【默认为localhost】
 -P MySQL服务器端口 【默认3306】
 -u 指定用户名 【默认root】
 -p 指定登录密码 【默认为空密码】
 此处mysql为指定登录的数据库
 -e 接SQL语句grant语法格式:
grant 权限列表 on 库名.表名 to ‘用户名’@‘客户端主机’ [identified by ‘密码’ with option参数];
==权限列表 all 所有权限(不包括授权权限)
 select,update==数据库.表名 . 所有库下的所有表 Global level
 web.* web库下的所有表 Database level
 web.stu_info web库下的stu_info表 Table level
 SELECT (col1), INSERT (col1,col2) ON mydb.mytbl Column level==客户端主机 % 所有主机
 192.168.2.% 192.168.2.0网段的所有主机
 192.168.2.168 指定主机
 localhost 指定主机==with_option参数
 GRANT OPTION: 授权选项
 MAX_QUERIES_PER_HOUR: 定义每小时允许执行的查询数
 MAX_UPDATES_PER_HOUR: 定义每小时允许执行的更新数
 MAX_CONNECTIONS_PER_HOUR: 定义每小时可以建立的连接数
 MAX_USER_CONNECTIONS: 定义单个用户同时可以建立的连接数查看授权的权限
 SHOW GRANTS\G
 SHOW GRANTS FOR admin1@’%’\G回收权限REVOKE
 语法:
 REVOKE 权限列表 ON 数据库名 FROM 用户名@‘客户端主机’示例:
 REVOKE DELETE ON . FROM admin1@’%’; //回收部分权限
 REVOKE ALL PRIVILEGES ON . FROM admin2@’%’; //回收所有权限
 REVOKE ALL PRIVILEGES,GRANT OPTION ON . FROM ‘admin2’@’%’;