Centos7.4 如何使用cmake编译安装mysql

举报
rivers 发表于 2021/12/22 23:09:52 2021/12/22
【摘要】 文章目录 基本概述部署环境实验步骤MYSQL数据库配置文件详解MYSQL 密码管理MYSQL 创建用户授权MYSQL 密码破解方法 总结MYSQL 用户操作连接数据库查看、创建、使用数据库,表...

基本概述

mysql简介

部署环境

系统 地址
CentOS Linux release 7.4.1708 192.168.10.10/24

实验步骤

1、Mysql 下载地址https://downloads.mysql.com/archives/community/

  • 下载安装包:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.20.tar.gz

    [root@localhost ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.20.tar.gz
    --2021-04-07 09:48:21--  https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.20.tar.gz
    Resolving downloads.mysql.com (downloads.mysql.com)... 137.254.60.14
    Connecting to downloads.mysql.com (downloads.mysql.com)|137.254.60.14|:443... connected.
    HTTP request sent, awaiting response... 302 Found
    Location: https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.20.tar.gz [following]
    --2021-04-07 09:48:23--  https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.20.tar.gz
    Resolving cdn.mysql.com (cdn.mysql.com)... 184.31.28.242
    Connecting to cdn.mysql.com (cdn.mysql.com)|184.31.28.242|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 32979820 (31M) [application/x-tar-gz]
    Saving to: ‘mysql-5.6.20.tar.gz’
    
    100%[=========================================>] 32,979,820  9.70MB/s   in 3.2s   
    
    2021-04-07 09:48:26 (9.70 MB/s) - ‘mysql-5.6.20.tar.gz’ saved [32979820/32979820]
    
    [root@localhost ~]# 
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

2、解压安装包

  • tar xf mysql-5.6.20.tar.gz

    [root@localhost ~]# tar xf mysql-5.6.20.tar.gz
    [root@localhost ~]# ls
    anaconda-ks.cfg  mysql-5.6.20  mysql-5.6.20.tar.gz  perl5  yum_back
    [root@localhost ~]# 
    
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5

3、安装依赖工具(gcc c ncurses ncurses-devel cmake libaio bison gcc-c++ git)

  • yum 安装

    [root@localhost ~]# yum -y install gcc c ncurses ncurses-devel cmake libaio bison gcc-c++  git 
    
        
       
    • 1

4、使用cmake预编译

  • Cmake 是一种跨平台的编译工具,比configure更高级,cmake主要编写cmakelists.txt,然后用cmake命令将cmakelists.txt转化成make需要的Makefile文件,最后用make命令编译源码生成的可执行程序

  • Cmake工具和configure工具,configure二进制程序用来生成Makefile文件,Makefile记录软件需要的环境和要编译的参数

    [root@localhost ~]# cd mysql-5.6.20
    [root@localhost mysql-5.6.20]# ls
    BUILD            dbug                 libmysqld    regex          unittest
    BUILD-CMAKE      Docs                 libservices  scripts        VERSION
    client           Doxyfile-perfschema  man          sql            vio
    cmake            extra                mysql-test   sql-bench      win
    CMakeLists.txt   include              mysys        sql-common     zlib
    cmd-line-utils   INSTALL-SOURCE       mysys_ssl    storage
    config.h.cmake   INSTALL-WIN-SOURCE   packaging    strings
    configure.cmake  libevent             plugin       support-files
    COPYING          libmysql             README       tests
    [root@localhost mysql-5.6.20]# cd
    [root@localhost ~]# 
    [root@localhost ~]# cd mysql-5.6.20
    [root@localhost mysql-5.6.20]# cmake  .  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55/ \
    > -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
    > -DMYSQL_DATADIR=/data/mysql \
    > -DSYSCONFDIR=/etc \
    > -DMYSQL_USER=mysql \
    > -DMYSQL_TCP_PORT=3306 \
    > -DWITH_XTRADB_STORAGE_ENGINE=1 \
    > -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    > -DWITH_PARTITION_STORAGE_ENGINE=1 \
    all \
    -DWITH_BIG_TABLES=1 \
    -DWITH_DEBUG=0> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    > -DWITH_MYISAM_STORAGE_ENGINE=1 \
    > -DWITH_READLINE=1 \
    > -DENABLED_LOCAL_INFILE=1 \
    > -DWITH_EXTRA_CHARSETS=1 \
    > -DDEFAULT_CHARSET=utf8 \
    > -DDEFAULT_COLLATION=utf8_general_ci \
    > -DEXTRA_CHARSETS=all \
    > -DWITH_BIG_TABLES=1 \
    > -DWITH_DEBUG=0
    
        
       
    • 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

5、make 编译

  • make -j4

    [root@localhost mysql-5.6.20]# make -j4
    
        
       
    • 1

6、make install

  • make install安装

    [root@localhost mysql-5.6.20]# make install -j4
    
        
       
    • 1

7、设置配置文件

  • 创建配置文件

    [root@localhost mysql-5.6.20]# cd /usr/local/mysql55/
    [root@localhost mysql55]# ll support-files/
    total 32
    -rwxr-xr-x 1 root root  1153 Apr  7 20:08 binary-configure
    -rw-r--r-- 1 root root   773 Jul 18  2014 magic
    -rw-r--r-- 1 root root  1126 Apr  7 20:08 my-default.cnf
    -rwxr-xr-x 1 root root  1061 Apr  7 20:08 mysqld_multi.server
    -rwxr-xr-x 1 root root   880 Apr  7 20:08 mysql-log-rotate
    -rwxr-xr-x 1 root root 10880 Apr  7 20:08 mysql.server
    
    [root@localhost mysql55]# \cp -f support-files/my-default.cnf /etc/my.cnf
    [root@localhost mysql55]# \cp -f support-files/mysql.server /etc/init.d/mysqld 
    
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

8、设置服务启动

  • 测试

    [root@localhost mysql55]# chkconfig --add mysqld
    [root@localhost mysql55]# chkconfig --level 35 mysqld on
    
        
       
    • 1
    • 2

9、创建用户、目录,并修改权限

  • /data/mysql数据库数据存放位置

  • 创建mysql用户

  • 修改权限

    [root@localhost mysql55]# mkdir -p /data/mysql
    [root@localhost mysql55]# useradd -M -s /sbin/nologin mysql
    [root@localhost mysql55]# chown -R mysql.mysql /data/mysql/
    [root@localhost mysql55]# /usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
    FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql55/scripts/mysql_install_db:   
    Data::Dumper
    
    这里报错,根据提示,安装perl*,然后再次初始化
    [root@localhost ~]# yum -y install perl*
    [root@localhost mysql55]# /usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
    ......
    
    [root@localhost mysql55]# ln -s /usr/local/mysql55/bin/* /usr/bin/   将mysql bin下面的执行程序连接到/usr/bin
    
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

10、启动、测试

  • service mysqld start

  • /etc/init.d/mysqld stop

  • systemctl start mysqld

    [root@localhost ~]# service mysqld start
    Starting MySQL.. SUCCESS! 
    [root@localhost ~]# 
    
        
       
    • 1
    • 2
    • 3

MYSQL数据库配置文件详解

  • 常见的配置文件参数

    [mysqld]   											服务器端配置
     datadir=/data/mysql   								数据目录
     socket=/var/lib/mysql/mysql.sock   				socket通信设置  
     user=mysql 										使用mysql用户启动
      
     symbolic-links=0  									是否支持快捷方式
     log-bin=mysql-bin  								开启bin-log日志
     server-id = 1  									mysql服务ID
     auto_increment_offset=1    	
     auto_increment_increment=2
    
     [mysqld_safe]  									mysql服务安全启动配置
     log-error=/var/log/mysqld.log  
     pid-file=/var/run/mysqld/mysqld.pid   
    key_buffer_size 									指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般为内存的50%
    show variables like ‘key_buffer_size‘;
    max_connections = 3000
    													每个客户端连接最大的错误允许数量,如果达到了此限制,这个客户端将会被MySQL服务阻止直到执行了”FLUSH  HOSTS”或者服务重启.
    innodb_buffer_pool_size
    													对于InnoDB表来说,innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%
    
    根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。
    basedir      = path          					# 使用给定目录作为根目录(安装目录)
    datadir      = path         				    # 从给定目录读取数据库文件。
    pid-file     = filename      					# 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); 
    [mysqld]                        
    socket = /tmp/mysql.sock     					# 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(Linux下默认是/var/lib/mysql/mysql.sock文件)
    port             = 3306      					# 指定MsSQL侦听的端口 
    key_buffer       = 384M      					# key_buffer是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写)。索引块是缓冲的并且被所有的线程共享,key_buffer的大小视内存大小而定。
    table_cache      = 512       					# 为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。可以避免频繁的打开数据表产生的开销
    sort_buffer_size = 2M        					# 每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100×6=600MB
    read_buffer_size = 2M       					 # 读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。
    query_cache_size = 32M       					# 指定MySQL查询结果缓冲区的大小
    read_rnd_buffer_size    = 8M 					# 改参数在使用行指针排序之后,随机读用的。
    myisam_sort_buffer_size = 64M 					# MyISAM表发生变化时重新排序所需的缓冲
    thread_concurrency      = 8  					# 最大并发线程数,取值为服务器逻辑CPU数量×2,如果CPU支持H.T超线程,再×2
    thread_cache            = 8  					#缓存可重用的线程数
    skip-locking            						# 避免MySQL的外部锁定,减少出错几率增强稳定性。 
    [mysqldump]
    max_allowed_packet      =16M 					# 服务器和客户端之间最大能发送的可能信息包
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

MYSQL 密码管理

MYSQL数据库在使用过程中为了加强安全防范,需要设置密码访问,如何设置密码,及密码忘记如何破解,如下设置密码授权,密码修改及破解的方法。

MYSQL 创建用户授权

  • 权限

    数据库名.*            数据库中的所有
    数据库名.           指定数据库中的某张表
    数据库名.存储过程      指定数据库中的存储过程
    *.*                   所有数据库
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 授权localhost主机通过huang用户和admin123密码访问本地的ISP库的所有权限;
    mysql> grant all on  ISP.* to huang@localhost identified by 'admin123';
    Query OK, 0 rows affected (0.21 sec)
    
        
       
    • 1
    • 2
    • 授权所有主机通过hun 用户和123密码访问本地ISP库的查询、插入、更新、删除权限
    mysql> grant select,insert,update,delete on *.* to hun@"%" identified by '123';
    Query OK, 0 rows affected (0.00 sec)
    
        
       
    • 1
    • 2
    • 授权192.168.10.10主机通过huang用户和admin123密码访问本地的ISP库的所有权限;
    mysql> grant all on ISP.* to huang@'192.168.10.10' identified by 'admin123';
    Query OK, 0 rows affected (0.00 sec)
    
        
       
    • 1
    • 2

MYSQL 密码破解方法

  • 在配置文件[mysqld]模块中添加skip-grant-tables

    [root@localhost ~]# /etc/init.d/mysqld stop      1、停止mysql服务
    Shutting down MySQL. SUCCESS! 
    [root@localhost ~]# 
    
    [root@localhost ~]# vim /etc/my.cnf              2、修改配置文件
    [root@localhost ~]# cat /etc/my.cnf|grep skip-grant*
    skip-grant-tables
    [root@localhost ~]# /etc/init.d/mysqld restart   3、重启mysql 服务,
     ERROR! MySQL server PID file could not be found!
    Starting MySQL.. SUCCESS! 
    
    [root@localhost ~]# mysql                         4、没有密码进入mysql
    mysql> use mysql;								  使用mysql数据库
    Database changed
    mysql> 
    mysql> update user set password = Password('hebao') where user = 'root';										   5、修改密码
    mysql> flush privileges;						  6、刷新权限
    mysql> quit;
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

总结

MYSQL 用户操作

连接数据库

mysql  -u user -p                   
例:mysql -u root -p
常见错误如下:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.
退出连接:
QUIT 或者 Ctrl+D


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

查看、创建、使用数据库,表

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

mysql> create database S default charset utf8 collate utf8_general_ci;

mysql> use S;
Database changed
mysql> show tables;
Empty set (0.00 sec)


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

用户操作

  • 创建用户
 创建用户
 create user '用户名'@'IP地址' identified by '密码';
 删除用户
 drop user '用户名'@'IP地址';
 修改用户
 rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
 修改密码
 set password for '用户名'@'IP地址' = Password('新密码');
 注:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)
 
 
 mysql> create user 'hbs'@'192.168.10.10' identified by '123';
 Query OK, 0 rows affected (0.00 sec)
 
 mysql> drop user 'hbs'@'192.168.10.10';
 Query OK, 0 rows affected (0.00 sec)
 
 
 mysql> rename user 'hbs'@'192.168.10.10' to 'liuaoni'@'192.168.10.13';
 Query OK, 0 rows affected (0.00 sec)
 
 mysql> 
 mysql> set password for 'liuaoni'@'192.168.10.13'=Password('!23');
 Query OK, 0 rows affected (0.00 sec)
 
 mysql> 

  
 
  • 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

MYSQL 表操作

  • 查看表

    show tables; 	 			查看数据库全部表
    select * from 表名;  		   查看表所有内容
    
        
       
    • 1
    • 2
  • 创建表

    create table 表名(
        列名  类型  是否可以为空,
        列名  类型  是否可以为空
    )ENGINE=InnoDB DEFAULT CHARSET=utf8
    来一个实例好详解
    CREATE TABLE `tab1` (
      `nid` int(11) NOT NULL auto_increment,
      `name` varchar(255) DEFAULT test,
      `email` varchar(255),
      PRIMARY KEY (`nid`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    注:
    默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
    自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)注意:1、对于自增列,必须是索引(含主键)2、对于自增可以设置步长和起始值
    主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
    
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 删除表

    drop table  表名
    
        
       
    • 1
  • 清空表内容

    delete from 表名
    truncate table 表名
    
        
       
    • 1
    • 2
  • 修改表内容

    添加列:   
    alter table 表名 add 列名 类型
    删除列:   
    alter table 表名 drop column 列名
    修改列:
    alter table 表名 modify column 列名 类型;  -- 类型
    alter table 表名 change 原列名 新列名 类型; -- 列名,类型
    添加主键:
    alter table 表名 add primary key(列名);
    删除主键:
    alter table 表名 drop primary key;
    alter table 表名  modify  列名 int, drop primary key;
    添加外键: 
    alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
    删除外键: 
    alter table 表名 drop foreign key 外键名称
    修改默认值:
    ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
    删除默认值:
    ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

数据库表内容的操作(增删改查)

  • nsert into  (列名,列名...) values (,,...)
    insert into  (列名,列名...) values (,,...),(,,...)
    insert into  (列名,列名...) select (列名,列名...) from 
    例:
        insert into tab1(name,email) values('test','test8851@163.com')
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
  • delete from    # 删除表里全部数据
    delete from  where id=1 and name='test' # 删除ID =1 和name='test' 那一行数据
    
        
       
    • 1
    • 2
  • update  set name  'test' where id>1
    
        
       
    • 1
  • select * from 
    select * from  where id > 1
    select nid,name,gender as gg from  where id > 1
    查这块的条件太多太多我给列举出来至于组合还得看大家的理解程度哈
    
    a、条件判断where
    select * from  where id > 1 and name != 'aylin' and num = 12;
    select * from  where id between 5 and 16;
    select * from  where id in (11,22,33)
    select * from  where id not in (11,22,33)
    select * from  where id in (select nid from )
    
    b、通配符like
    select * from  where name like 'zhang%'  # zhang开头的所有(多个字符串)
    select * from  where name like 'zhang_'  # zhang开头的所有(一个字符)
    
    c、限制limit
    select * from  limit 5;            - 5
    select * from  limit 4,5;          - 从第4行开始的5
    select * from  limit 5 offset 4    - 从第4行开始的5
    
    
    d、排序asc,desc
    select * from  order by  asc              - 根据 “列” 从小到大排列
    select * from  order by  desc             - 根据 “列” 从大到小排列
    select * from  order by 1 desc,2 asc    - 根据 “列1 从大到小排列,如果相同则按列2从小到大排序
    
    
    e、分组group by
    select num from  group by num
    select num,nid from  group by num,nid
    select num,nid from   where nid > 10 group by num,nid order nid desc
    select num,nid,count(*),sum(score),max(score),min(score) from  group by num,nid
    select num from  group by num having max(id) > 10
    特别的:group by 必须在where之后,order by之前
    
        
       
    • 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

文章来源: rivers.blog.csdn.net,作者:宝山的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:rivers.blog.csdn.net/article/details/115556729

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。