MySQL 5.6.37 编译安装
什么是数据库?
简单的说,数据库(database)就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据提供的多种方法来管理数据库里的数据。
数据库的种类
按照早起的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库,而在当今的互联网中,最常用的数据库模型主要是两种,即关系型数据库和非关系型数据库。
什么是关系型数据库?
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如老男孩教育某一期的学生关系就是一个二元关系。在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关系的表格分类、合并、连接或选取等运算来实现数据的管理。
关系型数据库诞生距今已有40多年了,从理论产生发展到显示产品,例如:大家最常见的mysql和oracle数据库,oracle在数据库领域里上升到了霸主地位,形成每年高达数百亿美元的庞大产业市场,而mysql也是不容忽视的数据库,以至于被oracle重金收购。
- 二维表格
- 市场占有量较大的为MySQL、oracle数据库,互联网运维最常用的就是MySQL。
- 通过SQL结构化查询语言来存取、管理数据。
- 在保持数据一致性方面很强。ACID理论。
- 关系型数据库的关系有:一对多,一对一,多对多。
什么是非关系型数据库?
非关系型数据库也被称为nosql数据库,请注意,nosql的本意是"not only sql",指的是非关系型数据库,而不是"NO SQL"的意思(没有sql语句?),因此,nosql的产生并不是要彻底的否定关系型数据库,而是作为传统关系型数据库的一个有效补充。Nosql数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
- nosql不是否定关系数据库,而是作为关系数据库的一个重要补充。
- nosql为了高性能、高并发而生,忽略影响高性能、高并发的功能。
- nosql典型产品memcached(纯内存)、rcdis(持久化缓存),mongodb
非关系型数据库的分类:
- 键值存储数据库,典型的数据库有:memcached、redis等
- 列存储数据库,典型的数据库有:cassandra、hbase等
- 面向文档数据库,典型的数据库有:mongodb等
选择MySQL数据库的原因
- MySQL性能卓越,服务稳定。很少出现异常宕机。
- MySQL开放源代码且无版权制约,自主性及使用成本低。
- MySQL历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助。
- MySQL软件体积小,安装使用简单,并且易于文虎,安装及维护成本低。
- MySQL品牌效应,使得企业无需考虑就直接用之,LAMP,LEMP流行架构
- MySQL支持多种操作系统,提供多种API接口,支持多种开发语言,特别对流行的PHP语言有很好的的支持。
企业使用MySQL数据库的一些建议:
- 稳定版:选择开源的社区版的稳定版GA版本。
- 产品线:可以选择5.1或5.5.互联网公司主流5.5,其次是5.1和5.6
- 选择MySQL数据库GA版发布后6个月以上的GA版本。
- 要选择前后几个月没有大的bug修复的版本,而不是大量修复bug的集中版本。
- 最好 较长时间没有更新发布的版本。
- 要考虑开发人员开发程序使用的版本是否兼容你选的版本。
- 作为内部开发测试数据库环境,跑大概3-6个月的时间。
- 优先企业非核心业务采用新版本的数据库GA版本软件。
- 向DBA高手请教,或者在及技术氛围好的群里和大家一起交流,使用真正的高手们用过的GA版本产品。
- 经过上述工序之后,若没有重要的功能BUG或性能瓶颈,则可以开始考虑作为任何业务数据服务的后端数据库软件。
安装环境准备
主机名 | IP | z主机说明 |
docker-1 | 192.168.56.11 | MySQL主服务器 |
docker-2 | 192.168.56.12 | MySQL从服务器 |
实验环境检查
[root@docker-1 src]# ip a #查看IP地址 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:dd:9e:d9 brd ff:ff:ff:ff:ff:ff inet 192.168.56.11/24 brd 192.168.56.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fedd:9ed9/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:dd:9e:e3 brd ff:ff:ff:ff:ff:ff [root@docker-1 src]# [root@docker-1 src]# cat /etc/redhat-release #查看系统版本 CentOS Linux release 7.3.1611 (Core) [root@docker-1 src]# [root@docker-1 src]# hostname #查看主机名 docker-1 [root@docker-1 src]# [root@docker-1 ~]# ntpdate time1.alyun.com #同步时间、docker-2也需要同步
软件准备
[root@docker-1 etc]# cd /usr/local/ [root@docker-1 src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.37.tar.gz #下载MySQL的源码包 [root@docker-1 src]# tar xf mysql-5.6.37.tar.gz #将下载的源码包解压到本地 [root@docker-1 src]# ll total 31452 drwxr-xr-x 34 7161 31415 4096 Sep 16 11:38 mysql-5.6.37 -rw-r--r-- 1 root root 32200158 Jun 2 23:54 mysql-5.6.37.tar.gz [root@docker-1 mysql-5.6.37]# id mysql #检查系统是否存在mysql用户 id: mysql: no such user #如果不存在则创建mysql用户 [root@docker-1 mysql-5.6.37]# groupadd -g 550 mysql [root@docker-1 mysql-5.6.37]# useradd -g mysql -u 550 mysql [root@docker-1 mysql-5.6.37]# id mysql uid=550(mysql) gid=550(mysql) groups=550(mysql)
安装编译前的依赖
[root@docker-1 mysql-5.6.37]# yum install cmake autoconf wget gcc-c++ gcc ncurses-devel -y [root@docker-1 src]# cd mysql-5.6.37/ cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DSYSCONFDIR=/etc \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DMYSQL_UNIX_ADDR=/var/run/mysql/mysqld.sock \ -DMYSQL_TCP_PORT=3306 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci 执行完cmake之后、执行make和make install 整个过程时间较长、请稍等!
编译参数详解
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装路径 -DMYSQL_DATADIR=/usr/local/mysql/data \ #数据文件存放地 -DSYSCONFDIR=/etc \ #配置文件my.cnf存放地 -DWITH_MYISAM_STORAGE_ENGINE=1 \ #支持MyIASM引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #支持InnoDB引擎 -DWITH_MEMORY_STORAGE_ENGINE=1 \ #支持Memory引擎 -DMYSQL_UNIX_ADDR=/var/run/mysql/mysqld.sock \ #连接数据库socket路径 -DMYSQL_TCP_PORT=3306 \ #数据库端口号 -DENABLED_LOCAL_INFILE=1 \ #允许从本地导入数据 -DWITH_PARTITION_STORAGE_ENGINE=1 \ #安装支持数据库分区 -DEXTRA_CHARSETS=all \ #安装所有的字符集 -DDEFAULT_CHARSET=utf8 \ #默认字符 -DDEFAULT_COLLATION=utf8_general_ci
[root@docker-1 local]# cd /usr/local/mysql [root@docker-1 mysql]# ll #编译后的文件 total 48 drwxr-xr-x 2 root root 4096 Sep 16 12:17 bin -rw-r--r-- 1 root root 17987 Jun 3 01:42 COPYING drwxr-xr-x 3 root root 17 Sep 16 12:17 data drwxr-xr-x 2 root root 52 Sep 16 12:17 docs drwxr-xr-x 3 root root 4096 Sep 16 12:17 include drwxr-xr-x 3 root root 4096 Sep 16 12:17 lib drwxr-xr-x 4 root root 28 Sep 16 12:17 man drwxr-xr-x 10 root root 4096 Sep 16 12:17 mysql-test -rw-r--r-- 1 root root 2496 Jun 3 01:42 README drwxr-xr-x 2 root root 29 Sep 16 12:17 scripts drwxr-xr-x 28 root root 4096 Sep 16 12:17 share drwxr-xr-x 4 root root 4096 Sep 16 12:17 sql-bench drwxr-xr-x 2 root root 130 Sep 16 12:17 support-files [root@docker-1 mysql]# chown -R mysql.mysql * #对当前目录授权
数据库初始化
初始化之前需要修改my.cnf文件、内容如下: [root@docker-1 src]# less /etc/my.cnf [mysql] socket=/var/lib/mysql/mysql.sock default-character-set=utf8 [mysqld] skip-grant-tables explicit_defaults_for_timestamp=true skip-name-resolve port = 3306 socket=/var/lib/mysql/mysql.sock basedir=/usr/local/mysql max_connections = 200 default-storage-engine=INNODB lower_case_table_names=1 max_allowed_packet=16M log-error=/var/log/mysql/mysql.log pid-file=/var/run/mysql/mysql.pid !includedir /etc/my.cnf.d [root@docker-1 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --no-defaults #开始初始化 此时MySQL还是启动不了、还需要做些后续操作 [root@docker-1 mysql]# cp ./support-files/mysql.server /etc/init.d/mysql #拷贝启动文件 [root@docker-1 mysql]# chmod +x /etc/init.d/mysql [root@docker-1 mysql]# /etc/init.d/mysql start #启动报错了 Starting MySQL.Logging to '/var/log/mysql/mysql.log'. 170916 12:28:00 mysqld_safe Directory '/var/lib/mysql' for UNIX socket file don't exists. ERROR! The server quit without updating PID file (/var/run/mysql/mysql.pid). [root@docker-1 mysql]# mkdir /var/lib/mysql [root@docker-1 mysql]# mkdir /var/log/mysql/ -p [root@docker-1 mysql]# chown -R mysql.mysql /var/log/mysql [root@docker-1 mysql]# mkdir /var/run/mysql [root@docker-1 mysql]# chown mysql /var/run/mysql [root@docker-1 mysql]# chown -R mysql.mysql /var/lib/mysql/ [root@docker-1 mysql]# /etc/init.d/mysql start #再次启动 Starting MySQL. SUCCESS! #成功 [root@docker-1 mysql]# [root@docker-1 mysql]# ps aux|grep mysql #查看mysql进程 root 49621 0.0 0.0 107904 660 pts/1 S+ 12:30 0:00 tailf /var/log/mysql/mysql.log root 50215 0.0 0.0 113268 1588 pts/0 S 12:31 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/var/run/mysql/mysql.pid mysql 50464 1.5 11.8 1307016 457068 pts/0 Sl 12:31 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=/var/log/mysql/mysql.log --pid-file=/var/run/mysql/mysql.pid --socket=/var/lib/mysql/mysql.sock --port=3306 root 50489 0.0 0.0 112660 964 pts/0 R+ 12:32 0:00 grep --color=auto mysql [root@docker-1 bin]# vim /etc/profile.d/mysql.sh #设置mysql环境变量 export PATH=/usr/local/mysql/bin:$PATH [root@docker-1 bin]# source /etc/profile #修改数据库密码 /usr/local/mysql/bin/mysqladmin -u root password 'new-password' /usr/local/mysql/bin/mysqladmin -u root -h 192.168.56.11 password 'new-password' #登录数据库 [root@docker-1 ~]# mysql -uroot -p -h127.0.0.1 Enter password: #输入设置的密码 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.37 Source distribution 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> mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.01 sec)
希望本文能够帮助到你 ^_^
来源:https://www.cnblogs.com/jianlin/p/9127302.html