源码编译 MySQL

MySQL Install 5.7.24

www.mysql.com www.oracle.com

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

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
在这里插入图片描述

安装环境
[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>

方法二:源码编译安装

在这里插入图片描述

网址: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
在这里插入图片描述

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@mysql3 mysql-5.7.19]# pwd
/root/mysql-5.7.19
[root@mysql3 mysql-5.7.19]# tar xf /root/boost_1_59_0.tar.gz
[root@mysql-5.7.17 ~]# 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 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@mysql2 mysql]# service mysqld start
Starting MySQL.Logging to '/usr/local/mysql/data/mysql2.err'.
 SUCCESS! 
[root@mysql2 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

登陆数据库:
[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)’

如果需要重新初始化…[可选]
[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/data

RPM or Yum:
datadir: /var/lib/mysql

源码包 和 预编译:
basedir: datadir:
/usr/local/mysql /usr/local/mysql/data

忘记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


开始进入数据库进行相关的操作
添加新的密码后,退出数据库
在这里插入图片描述
[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, salary
14 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’@’%’;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值