MySQL 第一篇
一、MySQL介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性
特点:
性能卓越,服务稳定,很少出现宕机
开放源代码且无版权制约,自主性强,使用成本低
支持多操作系统,提供多种API接口,支持多种开发语言(Python,Php,Java等)
二、MySQL安装方式
1.yum安装 (适合对数据库要求不太高的场合)
大的门户网站把源码根据企业需求制作成rpm,搭建yum仓库
2.常规方式编译安装
.configure/make/make install (mysql 5.1及以前)
cmake /make /make install
|
序号 |
MySQL安装方式 |
特点说明 |
|
1 |
yum/rpm安装 |
简单,部署速度快,但是没法定制安装,适合新手 |
|
2 |
二进制安装 |
解压软件,简单配置后就可以使用,不用安装,部署速度较快,专业DBA常用这种方式,软件名如:mysql-5.5.50-linux2.6-x86_64.tar.gz |
|
3 |
源码编译安装 |
可以定制安装(指定字符集,安装路径等),但是安装时间长 |
|
4 |
源码软件结合yum/rpm安装 |
把源码软件制作成符合要求的rpm,放到yum仓库,然后通过yum来安装,结合了1和3的优点,安装快速,可以任意定制参数 |
三、MySQL安装实战(源码cmake方式编译安装MySQL)
1.下载mysql/cmake安装包
|
1
2
3
|
[root@master ~]# mkdir /home/tools[root@master ~]# wget –P /home/tools https://cmake.org/files/v2.8/cmake-2.8.12.tar.gz[root@master ~]# wget -P /home/tools/ http://cdn.mysql.com//Downloads/MySQL-5.5/mysql-5.5.50.tar.gz |
2.建立账号
|
1
2
3
4
5
6
|
[root@master ~]# groupadd mysql[root@master ~]# useradd -s /sbin/nologin -g mysql -M mysqluseradd参数说明: -s /sbin/nologin # 表示禁止该用户登录,只需角色存在即可,加强安全 -g mysql # 指定属组 -M # 表示不创建用户家目录 |
3.配置安装环境
创建目录并授权
|
1
2
3
4
|
[root@master ~]# mkdir -p /usr/local/mysql[root@master ~]# mkdir -p /db/mysql[root@master ~]# chown -R mysql.mysql /usr/local/mysql[root@master ~]# chown -R mysql.mysql /db |
安装依赖
|
1
|
[root@master ~]# yum install gcc gcc-c++ make cmake ncurses-devel bison perl -y |
配置解析
|
1
2
3
4
|
[root@master ~]# hostnamemaster.opsedu.com[root@master ~]# vim /etc/hosts192.168.10.66 master # 添加一条 |
4.安装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
|
[root@master tools]# tar -zxf mysql-5.5.50.tar.gz[root@master tools]# cd mysql-5.5.50[root@master mysql-5.5.50]# cmake \> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \> -DMYSQL_DATADIR=/db/mysql \> -DMYSQL_TCP_PORT=3306 \> -DDEFAULT_CHARSET=utf8 \> -DDEFAULT_COLLATION=utf8_general_ci \> -DEXTRA_CHARSETS=all \> -DENABLED_LOCAL_INFILE=ON \> -DWITH_INNOBASE_STORAGE_ENGINE=1 \> -DWITH_FEDERATED_STORAGE_ENGINE=1 \> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \> -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \> -DWITHOUT_PARTITION_STORAGE_ENGINE=1 \> -DWITH_FAST_MUTEXES=1 \> -DWITH_ZLIB=bundled \> -DENABLED_LOCAL_INFILE=1 \> -DWITH_READLINE=1 \> -DWITH_EMBEDDED_SERVER=1 \> -DWITH_DEBUG=0 \> -DMYSQL_UNIX_ADDR=/tmp/mysql.sock[root@master mysql-5.5.50]# make # 编译[root@master mysql-5.5.50]# make install |
5.初始化mysql
配置mysql环境变量
|
1
2
|
[root@master mysql-5.5.50]# echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile[root@master mysql-5.5.50]# source /etc/profile |
查看配置文件
|
1
2
3
4
5
6
7
|
[root@master mysql-5.5.50]# ll support-files/*.cnf-rw-r--r-- 1 root root 4667 Jul9 01:26 support-files/my-huge.cnf-rw-r--r-- 1 root root 19759 Jul 9 01:26 support-files/my-innodb-heavy-4G.cnf-rw-r--r-- 1 root root 4641 Jul9 01:26 support-files/my-large.cnf-rw-r--r-- 1 root root 4652 Jul9 01:26 support-files/my-medium.cnf-rw-r--r-- 1 root root 2816 Jul9 01:26 support-files/my-small.cnf[root@master mysql-5.5.50]# /bin/cp support-files/my-small.cnf /etc/my.cnf # copy配置文件 |
创建mysql数据库文件
|
1
|
[root@master mysql-5.5.50]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/db/mysql --user=mysql |
以上命令主要是生成mysql库及相关文件:
这些文件是mysql正确运行所必需的基本数据库文件,其功能是对mysql权限、状态等进行管理

启动mysql
|
1
2
3
|
[root@master mysql-5.5.50]# /usr/local/mysql/bin/mysqld_safe --user=mysql &[root@master mysql-5.5.50]# netstat -lnt|grep 3306tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN |
配置mysql开机启动
|
1
2
3
4
|
[root@master mysql-5.5.50]# cp support-files/mysql.server /etc/init.d/mysqld[root@master mysql-5.5.50]# chmod 700 /etc/init.d/mysqld[root@master mysql-5.5.50]# chkconfig --add mysqld[root@master mysql-5.5.50]# chkconfig mysqld on |
初始化遇见错误
示例1:
WARING:The host ‘mysql’ could not be locked up with resolveip
需要修改主机名的解析,使其和usernae –n一样

示例2:
ERROR:1004 Can’t create file ‘/tmp/#sql300e_1_0.frm’(errno:13)
原因是/tmp权限有问题(不解决,后面可能无法登陆数据库)

6.后续操作
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@master mysql-5.5.50]# mysql # mysql安装好后,默认没有密码Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.5.50 Source distribution Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql># 为mysql增加(设定)密码[root@master mysql-5.5.50]# mysqladmin -uroot password 'q.123456' |
7. 单实例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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|
#!/bin/env python# -*- coding:utf-8 -*-'''MySQL部署py'''import os, sys, subprocessimport time, datetimeimport socketimport shutilclass MySQL_init: ''' MySQL编译安装py ''' def __init__(self): self.ret = [] self.compile = [] self.count = 0 self.status = ' ' @staticmethod def get_local_ip(): ''' 获取服务器IP,如果有公网地址就取公网IP,没有公网地址就取私网IP :return: ''' try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.connect(('8.8.8.8', 80)) (addr, port) = sock.getsockname() sock.close() return addr except socket.error: return "127.0.0.1" def install_check(self): ''' 检查命令是否执行成功 :return: True:成功 False:失败(每个方法最后统一检查) ''' for i in self.ret: self.count += i if self.count == 0: print('#INFO ==================== \033[1;32mThe command execution success.\033[0m ====================') time.sleep(3) return True else: print('#INFO ==================== \033[1;31mThe command execution failed.\033[0m ====================') time.sleep(3) return False def install_cmd(self, arg): ''' 收集shell命令执行结果 :param arg: 命令字符串 :return: 返回执行状态 ''' val = subprocess.call(arg, shell=True, stdout=subprocess.PIPE) self.ret.append(val) return val def MySQL_download(self): ''' 下载安装包 :return:False:下载执行失败 ''' print '#INFO ==================== \033[1;33mBegan to download MySQL installation package\033[0m ====================' time.sleep(3) try: os.makedirs('/home/tools') except OSError as e: pass os.chdir('/home/tools') self.install_cmd('wget -c %s/mysql-5.5.50.tar.gz' % self.url) if self.install_check() == False: return False def MySQL_add_acc(self): ''' 添加账号 :return:True:账号已存在 False:账号添加失败 ''' print '#INFO ==================== \033[1;33mBegin creating MySQL account\033[0m ====================' time.sleep(3) self.acc = raw_input('请输入要创建账号名:').strip() self.status = subprocess.call('id %s > /dev/null 2>1' %self.acc,shell=True) if self.status == 0: print('#INFO ==================== \033[1;32mThe command execution success.\033[0m ====================') time.sleep(3) return True else: self.install_cmd('groupadd {user} && useradd -s /sbin/nologin -g {user} -M {user}'.format(user=self.acc)) if self.install_check() == False: return False def MySQL_conf_env(self): ''' 配置mysql安装环境 :return: ''' print '#INFO ==================== \033[1;33mStart configuring the MySQL installation environment\033[0m ====================' time.sleep(3) self.install_path = raw_input('请输入一个不存在的目录(安装目录):').strip() self.data_path = raw_input('请输入一个不存在的目录(数据存放目录):').strip() if os.path.isdir(self.install_path) and os.path.isdir(self.data_path): pass else: try: os.makedirs(self.install_path) os.makedirs(self.data_path) except OSError as e: pass self.install_cmd('chown -R {user}.{user} {path1} {path2}'.format(user=self.acc, path1=self.install_path,path2=self.data_path)) ret = subprocess.call('yum -y install gcc gcc-c++ make cmake ncurses-devel bison perl', shell=True) if self.install_check() == True and ret == 0: pass else: return False self.hostname = socket.getfqdn(socket.gethostname()) # self.ip = socket.gethostbyname(socket.gethostname()) # 不知怎么回事,不同linux OS,有时可以获取到IP,有时会报‘socket.gaierror’错误 self.ip = MySQL_init.get_local_ip() with open('/etc/hosts', 'a') as f: f.write('\n{ip}\t{hostname}'.format(ip=self.ip, hostname=self.hostname)) def MySQL_install(self): ''' 安装MySQL :return: ''' print '#INFO ==================== \033[1;33mStart installing MySQL\033[0m ====================' time.sleep(3) os.chdir('/home/tools') self.install_cmd('tar zxf mysql-5.5.50.tar.gz') os.chdir('mysql-5.5.50') self.install_cmd('wget -c {url}/compile.conf'.format(url=self.url)) with open('compile.conf', 'r+') as f: for lines in f: self.compile.append(lines.strip()) self.compile[0] = '-DCMAKE_INSTALL_PREFIX=%s' % self.install_path self.compile[1] = '-DMYSQL_DATADIR=%s' % self.data_path self.status = ' ' self.compile = self.status.join(self.compile) rets = subprocess.call('cmake %s' % self.compile, shell=True) vals = subprocess.call('make -j 2 && make install', shell=True) if rets == vals == 0: pass else: return False os.remove('compile.conf') if self.install_check() == False: return False def MySQL_env_init(self): ''' 初始化mysql :return: ''' print '#INFO ==================== \033[1;33mStart initialized MySQL\033[0m ====================' time.sleep(3) self.install_cmd("echo 'export PATH={ins_path}/bin:$PATH' >>/etc/profile".format(ins_path=self.install_path)) self.install_cmd('source /etc/profile') shutil.copyfile('support-files/my-small.cnf', '/etc/my.cnf') self.install_cmd('{path1}/scripts/mysql_install_db --basedir={path1} --datadir={path2} --user={user}'.format(path1=self.install_path, path2=self.data_path, user=self.acc)) if self.install_check() == False: return False def MySQL_boot(self): ''' 启动MySQL :return: ''' print '#INFO ==================== \033[1;33mStarting MySQL...\033[0m ====================' self.install_cmd('{path}/bin/mysqld_safe --user={user} &'.format(path=self.install_path, user=self.acc)) print '\r' time.sleep(5) rests = self.install_cmd('netstat -an | grep 3306 >/dev/null') if rests == 0: pass else: return False self.install_cmd('/bin/cp support-files/mysql.server /etc/init.d/mysqld') self.install_cmd('chmod 700 /etc/init.d/mysqld') self.install_cmd('chkconfig --add mysqld && chkconfig mysqld on') if self.install_check() == False: return False else: print '#INFO \033[1;32mMySQL installation was successful.\033[0m' def main(self): ret = MySQL_init() if ret.MySQL_download() == False: print '\033[1;31m#INFO ==========> MySQL 安装包下载失败\033[0m.' sys.exit(1) elif ret.MySQL_add_acc() == False: print '\033[1;31m#INFO ==========> MySQL 账号创建失败\033[0m.' sys.exit(2) elif ret.MySQL_conf_env() == False: print '\033[1;31m#INFO ==========> MySQL 安装环境配置失败\033[0m.' sys.exit(3) elif ret.MySQL_install() == False: print '\033[1;31m#INFO ==========> MySQL 安装失败\033[0m.' sys.exit(4) elif ret.MySQL_env_init() == False: print '\033[1;31m#INFO ==========> MySQL 初始化失败\033[0m.' sys.exit(4) elif ret.MySQL_boot() == False: print '\033[1;31m#INFO ==========> MySQL 启动失败\033[0m.' sys.exit(5)if __name__ == '__main__': val = MySQL_init() val.main() |
MySQL 第一篇的更多相关文章
- 详解MySQL第一篇—MySQL简要介绍及DDL语句
背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...
- mycat操作MySQL第一篇:全局表
1.安装mycat,点击bin下面startup_nowrap.bat启动 2.客户端连接mycat:server.xml里面的 <!--连接mycat用户名和密码.数据库--> < ...
- MySQL 第一篇:初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)
Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...
- 【转帖】Mysql多维数据仓库指南 第一篇 第1章
Mysql多维数据仓库指南 第一篇基本原理 章节列表: 第1章:基本组成 第2章:维度历史 第3章:维度可加性 第4章:维度查询 本篇概述 你将运用关系数据库来实施一个维度数据仓库.事实表和维表这两 ...
- 小白两篇博客熟练操作MySQL 之 第一篇
小白两篇博客熟悉操作MySQL 之 第一篇 一.概述 1. 什么是数据库? 答: 储存数据的仓库, 如: 在ATM的事例中创建的一个db 目录, 称为数据库 2. 什么是Mysql, Oracl ...
- Mysql优化(出自官方文档) - 第一篇(SQL优化系列)
Mysql优化(出自官方文档) - 第一篇 目录 Mysql优化(出自官方文档) - 第一篇 1 WHERE Clause Optimization 2 Range Optimization Skip ...
- [译]PrestaShop开发者指南 第一篇 基础
# 第一篇 基础 PS(PrestaShop简称)一开始就设定了能够在它的基础上很简单的构建第三方模块的机制,让它成为一款具有极高定制性的电子商务软件. PS的可以在三个方面进行定制: * 主题 * ...
- 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...
随机推荐
- VS2012 InstallShield2013LimitedEdition激活
VS2012 InstallShield2013LimitedEdition激活 在实际开发工作中由于升级操作系统后,不知何种原因,导致 InstallShield2013LimitedEdition ...
- Mysql无法创建外键的原因
在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1. 两个字段的类型或者大小不严格匹配.例如,如果一个 ...
- 使用sql语句创建修改SQL Server标识列(即自动增长列)
一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统 ...
- RT-Thread下的串口驱动程序分析【转载】
编写本文稿的目的,在于通过分析stm32平台上的串口中断源码,学习 RTT中如何编写中断处理程序 如何编写RTT设备驱动接口代码 了解串行设备的常见处理机制 先以RTT官方源码中的STM32 BSP包 ...
- 黄聪:css3实现图片划过一束光闪过效果(图片光影掠过效果)
CSS代码 .guangshu { display:block; position: relative; width:800px; height:450px; margin:0 auto;} .gua ...
- Java应用程序监控JavaMelody
JavaMelody是运行在Java Web容器中,用来监控Java内存和J服务器CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请求等的执行数量,平均执行时间,错误百分 ...
- 异步|同步&阻塞|非阻塞
异步|同步:区别在于发出一个功能调用时,是否马上得到返回结果 阻塞|非阻塞:区别在于调用结果返回之前,当前线程是否挂起 node.js:单线程.异步非阻塞模型 单线程与异步不矛盾,与并发是矛盾的 ht ...
- oracle V$SESSION各个字段的含义
源地址:https://zhidao.baidu.com/question/345549929.html SADDR - session addressSID - session identifier ...
- Codeforces 732D [二分 ][贪心]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: n天进行m科考试,每科考试需要a的复习时间,n天每天最多可以考一科.并且指定哪天考哪科. 注意考试那天不能复习. 问最少需要多少天可全部通过考试. ...
- Hive On Spark hiveserver2方式使用
启动hiveserver2: hiveserver2 --hiveconf hive.execution.engine=spark spark.master=yarn 使用beeline连接hives ...