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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Centos7.4 如何使用cmake编译安装mysql

基本概述



mysql简介


部署环境



image.png


实验步骤



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



[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 ~]# 


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 ~]# 


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 


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


5、make 编译


  • make -j4


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


6、make install


  • make install安装


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


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 


8、设置服务启动


  • 测试


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


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


10、启动、测试


  • service mysqld start


  • /etc/init.d/mysqld stop


  • systemctl start mysqld


[root@localhost ~]# service mysqld start
Starting MySQL.. SUCCESS! 
[root@localhost ~]# 


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使用该参数指定大小的内存来缓冲数据和索引。


对于单独的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          # 服务器和客户端之间最大能发送的可能信息包


MYSQL 密码管理



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


MYSQL 创建用户授权


  • 权限


数据库名.*            数据库中的所有
数据库名.表           指定数据库中的某张表
数据库名.存储过程      指定数据库中的存储过程
*.*                   所有数据库


  • 授权localhost主机通过huang用户和admin123密码访问本地的ISP库的所有权限;


mysql> grant all on  ISP.* to huang@localhost identified by 'admin123';
Query OK, 0 rows affected (0.21 sec)


  • 授权所有主机通过hun 用户和123密码访问本地ISP库的查询、插入、更新、删除权限


mysql> grant select,insert,update,delete on *.* to hun@"%" identified by '123';
Query OK, 0 rows affected (0.00 sec)


  • 授权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)


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;


总结



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


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


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)


用户操作


  • 创建用户


 创建用户
 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> 


MYSQL 表操作


  • 查看表


show tables;        查看数据库全部表
select * from 表名;        查看表所有内容


  • 创建表


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、对于自增可以设置步长和起始值
主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。


  • 删除表


drop table  表名


  • 清空表内容


delete from 表名
truncate table 表名


  • 修改表内容


添加列:   
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;


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



nsert into 表 (列名,列名...) values (值,值,...)
insert into 表 (列名,列名...) values (值,值,...),(值,值,值...)
insert into 表 (列名,列名...) select (列名,列名...) from 表
例:
    insert into tab1(name,email) values('test','test8851@163.com')



delete from 表   # 删除表里全部数据
delete from 表 where id=1 and name='test' # 删除ID =1 和name='test' 那一行数据



update 表 set name = 'test' where id>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之前


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
关系型数据库 MySQL Linux
本地虚拟机centos7通过docker安装主从mysql5.7.21
本地虚拟机centos7通过docker安装主从mysql5.7.21
22 0
|
3天前
|
关系型数据库 MySQL Linux
MySQL免编译安装和用户管理(转)
MySQL免编译安装和用户管理(转)
11 1
|
3天前
|
关系型数据库 MySQL Linux
在Centos7中:通过Docker安装MySQL5.7(保姆级)
在Centos7中:通过Docker安装MySQL5.7(保姆级)
131 0
|
3天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
3天前
|
SQL 关系型数据库 MySQL
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
|
3天前
|
安全 关系型数据库 MySQL
CentOS 7系统加固详细方案SSH FTP MYSQL加固
CentOS 7系统加固详细方案SSH FTP MYSQL加固
|
3天前
|
关系型数据库 MySQL Linux
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
|
3天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
23 0
|
3天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
12 0
|
3天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
18 0