- 之前的虚拟机被误删除了,这按照之前的笔记重新进行编译一次,这次的编译过程更加的详细
安装准备
rhel5.8 172.25.23.14
kernel version: 2.6.18-308.el5
mysql-5.5.12.tar.gz cmake-2.8.4.tar.gz 系统自带的软件版本为2.6.4,有点早;
虚拟机内存大于2048
硬盘空间大小大于20G安装环境准备,确保安装开发环境组件
Development Libraries
Development Tools
- 如果没有安装使用,下面的命令进行安装
[root@server60 ~]# yum groupinstall "Development Libraries Development Tools" -y
- 第一部肯定是解压软件包
[root@server60 ~]# tar xf cmake-2.8.4.tar.gz
[root@server60 ~]# tar xf mysql-5.5.12.tar.gz
- 首先编译安装的是
cmake
,如果不需要指定特殊的选项,可以直接使用默认的选项进行安装
[root@server60 cmake-2.8.4]# ./configure 大约两三分钟
- 根据提示执行
make && make install
- 执行
make
,大约四分钟左右
[root@server60 cmake-2.8.4]# make
- 接下来执行
make install
[root@server60 cmake-2.8.4]# make install
- 准备MySQL的环境
- 这里是用来逻辑卷提供给
MySQL
来使用; - 这里已经为虚拟机添加了一块磁盘
格式化,并且调整分区类型为
8e
接下来是制作卷组的过程
[root@server60 ~]# pvcreate /dev/vdb1
Writing physical volume data to disk "/dev/vdb1"
Physical volume "/dev/vdb1" successfully created
[root@server60 ~]# vgcreate mysqlvg /dev/vdb1
Volume group "mysqlvg" successfully created
[root@server60 ~]# lvcreate -L 16G -n mysqldate mysqlvg
Logical volume "mysqldate" created
- 查看创建的逻辑卷
- 接下来进行逻辑卷的格式化操作,然后就可以进行挂载使用了
[root@server60 ~]# mke2fs -j /dev/mysqlvg/mysqldate
- 这个逻辑卷作为
Mysql
的数据目录使用
[root@server60 ~]# mkdir -pv /mysql/mydata
mkdir: created directory `/mysql'
mkdir: created directory `/mysql/mydata'
- 然后进行自动挂载操作
[root@server60 ~]# vim /etc/fstab
/dev/mysqlvg/mysqldate /mysql/mydata/ ext3 defaults 0 0
- 创建运行
mysql
的相关用户和组
[root@server60 ~]# groupadd -r mysql
[root@server60 ~]# useradd -r -g mysql -s /sbin/nologin mysql
- 更改挂载目录的属主和属组
[root@server60 ~]# chown -R mysql.mysql /mysql/mydata/
- 编译安装MySQL
- 检查一下
CMAKE
的环境变量
- 使用命令查看编译环境
[root@server60 mysql-5.5.12]# cmake . -LH //这个过程第一次需要执行一段时间
// CXX compiler.
CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++
// C compiler.
CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc
// install prefix
CMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql
// Set to true if this is a community build
COMMUNITY_BUILD:BOOL=ON
// Enable profiling
ENABLED_PROFILING:BOOL=ON
// Enable debug sync (debug builds only)
ENABLE_DEBUG_SYNC:BOOL=ON
// Installation directory layout. Options are: STANDALONE (as in zip or tar.gz installer), RPM, DEB, SVR4
INSTALL_LAYOUT:STRING=STANDALONE
// default MySQL data directory
MYSQL_DATADIR:PATH=/usr/local/mysql/data
// MySQL maintainer-specific development environment
MYSQL_MAINTAINER_MODE:BOOL=OFF
// Link ARCHIVE statically to the server
WITH_ARCHIVE_STORAGE_ENGINE:BOOL=OFF
// Link BLACKHOLE statically to the server
WITH_BLACKHOLE_STORAGE_ENGINE:BOOL=OFF
// Use dbug/safemutex
WITH_DEBUG:BOOL=OFF
// Compile MySQL with embedded server
WITH_EMBEDDED_SERVER:BOOL=OFF
// Options are: none, complex, all
WITH_EXTRA_CHARSETS:STRING=all
// Link FEDERATED statically to the server
WITH_FEDERATED_STORAGE_ENGINE:BOOL=OFF
// Link INNOBASE statically to the server
WITH_INNOBASE_STORAGE_ENGINE:BOOL=ON
// Use bundled libedit
WITH_LIBEDIT:BOOL=ON
// Compile with tcp wrappers support
WITH_LIBWRAP:BOOL=OFF
// Link PARTITION statically to the server
WITH_PARTITION_STORAGE_ENGINE:BOOL=ON
// Link PERFSCHEMA statically to the server
WITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=ON
// Generate PIC objects
WITH_PIC:BOOL=OFF
// Use bundled readline
WITH_READLINE:BOOL=OFF
// Options are : no, bundled, yes (prefer os library if present otherwise use bundled), system (use os library)
WITH_SSL:STRING=no
// Compile MySQL with unit tests
WITH_UNIT_TESTS:BOOL=ON
// Valgrind instrumentation
WITH_VALGRIND:BOOL=OFF
// Which zlib to use (possible values are 'bundled' or 'system')
WITH_ZLIB:STRING=system
- 上面会生成大量的默认的配置选项,需要修改下面的这个选项
- 这里选择指定一下的选项进行安装
[root@server60 mysql-5.5.12]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
> DMYSQL_DATADIR=/mysql/mydata \
> -DSYSCONFDIR=/etc \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITH_READLINE=1 \
> -DWITH_SSL=system \
> -DWITH_ZLIB=system \
> -DWITH_LIBWRAP=0 \
> -DWITH_UNIX_ADDR=/tmp/mysql.sock \
- 可以得到下面输出信息
- 然后可以执行
make
操作
[root@server60 mysql-5.5.12]# make //这个过程相当漫长
* 最后执行make install
[root@server60 mysql-5.5.12]# make install
- 编译完成之后的工作
- 修改安装完成之后的属组
[root@server60 mysql-5.5.12]# chown -R :mysql /usr/local/mysql/
- 完成数据库的初始化
[root@server60 mysql]# cd /usr/local/mysql
[root@server60 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/mysql/mydata/
* 复制相关的配置文件到指定的位置
[root@server60 mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@server60 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@server60 mysql]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- 这里修改一下配置文件
my.cnf
并且添加修改后的数据路径位置
[root@server60 mysql]# vim /etc/my.cnf
datadir = /mysql/mydata
- 接下来添加
mysql
的环境变量
[root@server60 mysql]# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin/
- 然后更新环境变量
[root@server60 mysql]# source /etc/profile.d/mysql.sh
* 然后启动服务
* 第一次连接服务
- 查看支持的存储引擎
mysql> show ENGINES\G;
*************************** 1. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 7. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 8. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
8 rows in set (0.00 sec)
- 默认的存储引擎是这个
- 删除匿名用户
mysql> DROP USER ''@'server60.com';
Query OK, 0 rows affected (0.00 sec)
mysql> DROP USER ''@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> DROP USER 'root'@'::1';
Query OK, 0 rows affected (0.00 sec)
- 为用户添加密码
mysql> UPDATE user SET Password=PASSWORD('westos') WHERE User='root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
* 之后输入密码之后才能够登陆
- 添加密码文件,免密码登陆
[root@server60 mysql]# vim ~/.my.cnf
[client]
[client]
user = root
password = westos
host = localhost
[root@server60 mysql]# ll ~/.my.cnf
--w------- 1 root root 58 05-06 04:35 /root/.my.cnf
- 关于数据目录的表文件
[root@server60 mysql]# pwd
/mysql/mydata/mysql
- 对于
MyISAM
:
- 其中
db.frm
:表示RG_MYISAM
的表结构定义; event.MYD
:表示表数据文件定义;event.MYI
:表示索引文件;
- 其中
- 对于
InnoDB
:
- 支持所有表共享一个表空间文件,但是这种方式不支持很多高级特性,建议每表一个独立的 表空间文件,使用
innodb_file_per_table
- 支持所有表共享一个表空间文件,但是这种方式不支持很多高级特性,建议每表一个独立的 表空间文件,使用
- 更改配置文件添加这个选项
[root@server60 mysql]# vim /etc/my.cnf
innodb_file_per_table = 1 //添加在[mysqld]开头的一行;
- 更改配置文件之后,使用
service mysqld reload
,服务器变量并没有生效,所以还是建议使用
[root@server60 mysql]# /etc/init.d/mysqld start
查看服务器变量关于
mysql> show GLOBAL VARIABLES LIKE '%innodb%';
innodb_file_per_table | ON
对于
MySQL
的服务器变量的生效时机都是存在区别的,大约一共有600
个变量,其中300
个服务器变量,300
个会话变量;使用
InnoDB
存储引擎创建表,并且查看使用每表一个表空间文件生成的文件,并且解释含义
mysql> CREATE DATABASE dbdata;
Query OK, 1 row affected (2.39 sec)
mysql> use dbdata;
Database changed
mysql> REHASH;
mysql> CREATE TABLE dbdata(
-> id INT NOT NULL,
-> name CHAR(30));
Query OK, 0 rows affected (0.25 sec)
- 接下来查看
dbdata
里面生成的文件内容
- 解释这三个文件的含义:
dbdata.frm
:表示表结构定义文件;dbdata.ibd
:表示表空间(表数据和索引文件),只有打开了每表一个表空间,对于每个表都存在独立的这个文件,否则就只有一个表空间文件用于共享;db.opt
:使用的字符集和和排序规则,查看一下这个文件的内容
[root@server60 dbdata]# file db.opt
db.opt: ASCII text
MySQL客户端命令的使用
mysql
:--user -u
:用于指定连接的用户;--host -h
:用于指定连接的主机;--password -p
:用于指定连接的密码;--port
:用于指定连接的端口;--protocol
:用于指定连接的协议;--databases DATABASES -D
:用于指定某个数据库,然后进行连接,并且直接进入数据库;
MySQL
的交互式命令:- 客户端命令:
clear (\c)
:用于提前终止指令执行;connect (\r)
:用于重新连接到MySQL
服务器上面;go (\g)
:用于将语句发送到server
段进行执行;ego (\G)
:用于将语句发送到服务器段执行,并且结果使用竖排方式进行显示;exit (\q)
:Exit mysql. Same as quit.
;print (\p)
:Print current command.
;system (\!)
:Execute a system shell command.
;warnings (\W)
:Show warnings after every statement.
;nowarning (\w)
:Don't show warnings after every statement.
;
MySQL
的提示符号;
mysql >
:表示语句正常输入;->
:表示语句没有结束,可以正常输入'>
:表示缺少单引号的后半部分;">
:表示缺少双引号的后半部分;`>
:表示缺反引号的后一半;/*>
:表示缺多行注释的后一半;
- 对于
MySQL
来说支持批处理模式,将SQL
语句组成的脚本,例如
CARETE DATABASE newdb;
CREATE TABLE mydb(id INT NOT NULL, name CHAR(30));
- 使用
Mysql
提供的客户端命令来进行导入
mysql> \. name.sql
- 使用重定向的方式来进行脚本执行
[root@server60 dbdata]# mysql --uroot -p < name.sql
对于
MySQL
本地执行的命令是不需要使用;
来进行结束的,但是对于需要发送到server
执行的命令必须使用;
来表示语句的结束符号;语句结束符号可以通过delimiter (\d) Set statement delimiter.
用来自定义语句结束符号MySQL的其他选项
--compress
:表示语句先压缩在发送,用于节约带宽;-ssl-ca=/path/to/ssl_ca_file
:表示CA
文件的位置;--ssl-capath=/path/to/ca_dir
:表示CA
目录的位置;--ssl-cert=/path/tocert_file
:表示自己的证书位置;--ssl-cipher-cipher_list
:表示加密算法列表;--ssl-key=/path/to/key_file
:表示自己的秘钥文件;--ssl-verify-server-cert
:表示是否验证服务器段证书;- MySQL的使用技巧
- 名称补全:
- 这个功能需要将,库,命令进行遍历,并且载入内存后,才能够实现补全功能,禁用使用
-A --no-auto-rehash --disable-auto-rehash
,启用使用\#
或者rehash
; 表示可以实现对象的名称补全;
- 这个功能需要将,库,命令进行遍历,并且载入内存后,才能够实现补全功能,禁用使用
MySQL
的输出格式:--html
,用于将输出指定为html
格式,-xml
输出格式为xml
格式;- 获取服务器段命令的使用
HELP COMMAND
来获取帮助; - 其他的命令
mysqladmin
create
命令:
drop
ping
:用于查看服务器是否在线
processlist
:用于查看服务器的进程列表
status
:用于查看服务器的状态信息
- 按照批的方式进行显示
--sleep --count
- 上图表示每两秒钟显示一次,一共显示四次;
extended-status
:用于显示服务器的扩展状态
variables
:用于显示服务器变量
flush-privileges
:用于刷新授权表,等同于reload
flush-status
:表示重置大多数服务器变量,这个轻易不要使用;flush-tables
:关闭已经打开的表的句柄;flush-threads
:重置线程缓存;flush-logs
:进行日志滚动;flush-hosts
:用于解决用于过多的连接尝试导致的无法登录;refresh
:关闭所有打开的表,并且滚动日志,相当于同时执行flush-hosts
和flush-logs
;shutdown
:用于关闭MySQL
服务器进程;version
:服务器版本以及当前状态信息;
start-slave
:启动复制,启动从服务器的复制线程,包括两个线程SQL_thread
以及IO_thread
;stop-slave
:关闭复制功能;- 关于
mysqladmin
管理数据库时,必须是指定用户以及密码等验证信息;