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 ...
随机推荐
- Android framework完整源码下载
包括cpp等native代码.可zip打包下载. https://github.com/android/platform_frameworks_base/branches/stale Android线 ...
- python---IPy
Python第三方模块IPy,可完成高效的IP规划工作 #安装 #pip3 install IPy #最新版本V0.83 IP地址 网段的基本处理 >>>from IPy impor ...
- Python的第三天
一.字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: ...
- 安装lxml时gcc: internal compiler error: Killed (program cc1)的解决方法
在安装lxml时出现如下错误 gcc: internal compiler error: Killed (program cc1) 通过查看dmesg发现下述错误信息[2517343.500178] ...
- 可重入锁 公平锁 读写锁、CLH队列、CLH队列锁、自旋锁、排队自旋锁、MCS锁、CLH锁
1.可重入锁 如果锁具备可重入性,则称作为可重入锁. ========================================== (转)可重入和不可重入 2011-10-04 21:38 这 ...
- 如何把maven项目转化为webapp
1.右键Project Facets, Convert to faceted from 2.改Dynamic Web Module的Version3.点击下面的Further configuratio ...
- [POJ2151]Check the difficulty of problems (概率dp)
题目链接:http://poj.org/problem?id=2151 题目大意:有M个题目,T支队伍,第i个队伍做出第j个题目的概率为Pij,问每个队伍都至少做出1个题并且至少有一个队伍做出N题的概 ...
- ie8用ajax访问不能每次都刷新的问题
最近发现,用ajax访问后台,用ie8访问,第一次可以正常返回值,后面就一直不会执行后台,总是返回第一次访问的结果. 用ie9,ie10等都没问题,chrome,等浏览器也没有问题. 测试后发现,是i ...
- ADO数据库操作
void CSjtestDlg::OnBnClickedButtonAdd() { // TODO: 在此添加控件通知处理程序代码 this->ShowWindow(SW_HIDE); DigA ...
- 说说Timing这回事(转载)
本文原始位置:FPGANotes Blog http://wiki.fpganotes.com/doku.php/ise:timing:my_summary Intro 问:一个FPGA设计项目需要用 ...