文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mysql数据库理论基础一:MySQL编译安装

2024-04-02 19:55

关注

 Mysql数据库理论基础一:编译安装

一、简介

由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点:

二、安装MySQL   ( 依赖gcc  gcc-c++  ncurses-devel  openssl )

2.1、编译安装前准备

确认系统环境

[root@lamp mysql]# uname -a

Linux lamp 2.6.32-71.el6.x86_64 #1 SMP Wed Sep 1 01:33:01 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

[root@lamp ~]# ll

-rw-r--r--.  1 root root   5691656 Mar  6 08:54 cmake-2.8.8.tar.gz

-rw-r--r--.  1 root root  24739429 Mar  6 09:04 mysql-5.5.28.tar.gz

[root@lamp ~]# rpm -qa gcc gcc-c++ openssl ncurses-devel

gcc-4.4.4-13.el6.x86_64

gcc-c++-4.4.4-13.el6.x86_64

ncurses-devel-5.7-3.20090208.el6.x86_64

openssl-1.0.0-4.el6.x86_64


安装前需确认开发环境组是否安装:Development Tools(开发工具)和Development Libraries(开发库)

[root@lamp ~]# yum groupinstall "Development Tools"

[root@lamp ~]# yum groupinstall "Development Libraries"


** mysql数据库随着时间的增长,数据会越来越大,所以应该把数据库数据放置在一个单独的可扩展的分区卷上,以便后期管理和备份,挂载在逻辑卷,方法如下:

[root@lamp ~]# fdisk /dev/sda  #新建分区

aCommand (m for help): n

p

Partition number (1-4): 1

Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G

Command (m for help): T

Hex code (type L to list codes): 8e  

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1306    10490413+  8e  Linux LVM

Command (m for help): w

[root@lamp ~]# partprobe /dev/sda  #通知内核重读sda分区

[root@lamp ~]# fdisk -l   #查看分区

Device Boot  Start  End  Blocks  Id  System

/dev/sdb1  1   2612  20980858+  8e  Linux LVM

[root@lamp ~]# pvcreate /dev/sda1   #先把/dev/sda1分区建立一个pv物理卷

  Physical volume "/dev/sda1" successfully created

[root@lamp ~]# pvs  #查看物理卷 

  PV    VG   Fmt  Attr PSize  PFree 

  /dev/sdb1    lvm2 a-   10.00g 10.00g

[root@lamp ~]# vgcreate myvg /dev/sda1   #以/dev/sda1分区创建myvg卷组 

  Volume group "myvg" successfully created

[root@lamp ~]# vgs  #查看卷组

  VG   #PV #LV #SN Attr   VSize  VFree 

  myvg   1   0   0 wz--n- 10.00g 10.00g

[root@lamp ~]# lvcreate -n mydata -L 10G myvg  #在卷组myvg中建立一个大小为10G,

                                 名称为mydata 的逻辑卷

  Logical volume "mydata" created

[root@lamp ~]# lvs    #查看逻辑卷  

  LV    VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert

  mydata  myvg  -wi-a- 10.00g     

[root@lamp ~]# mke2fs -t ext4 /dev/myvg/mydata   #格式化mydata逻辑卷

[root@lamp ~]# mkdir /mydata   #建立一个目录作为挂载点

[root@lamp ~]# vim /etc/fstab    #设定逻辑卷开机自动挂载

 # /etc/fstab

 tmpfs          /dev/shm       tmpfs   defaults      0 0

 devpts          /dev/pts       devpts  gid=5,mode=620  0 0

 sysfs          /sys         sysfs   defaults       0 0

 proc           /proc        proc    defaults       0 0

 /dev/myvg/mydata   /mydata    ext4    defaults        0 0  #新增该行内容

[root@lamp ~]# mount -a    #重读/etc/fstab硬盘挂载文件,使得新增的分区挂载成功

[root@lamp ~]# mount   #查看已经挂载的分区

...

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

/dev/mapper/myvg-mydata on /mydata type ext4 (rw)  #逻辑卷mydata已经挂载到/mydata目录

[root@lamp ~]# mkdir /mydata/data

[root@lamp ~]# ll /mydata

总用量 20

drwxr-xr-x. 2 root root  4096  2月 17 17:30 data

drwx------. 2 root root 16384  2月 17 15:11 lost+found

[root@lamp ~]# groupadd -r mysql  #-r建立一个系统组

groupadd: group 'mysql' already exists

[root@lamp ~]# useradd -r -g mysql -s /sbin/nologin mysql #建立一个系统用户不能登录

useradd: user 'mysql' already exists

[root@lamp ~]# id mysql   #查看用户信息

uid=27(mysql) gid=27(mysql) groups=27(mysql)

[root@lamp ~]# chown -R mysql.mysql /mydata/data/  #更改文件夹属主和属组-R递归

[root@lamp ~]# ll /mydata

总用量 20

drwxr-xr-x. 2 mysql mysql  4096  2月 17 17:30 data

drwx------. 2 root  root  16384  2月 17 15:11 lost+found

[root@lamp ~]# chmod o-rx /mydata/data/   #删除/data组其他人的读和执行权限

[root@lamp ~]# ll /mydata

总用量 20

drwxr-x---. 2 mysql mysql  4096  2月 17 17:30 data

drwx------. 2 root  root  16384  2月 17 15:11 lost+found



2.2、编译安装cmake-2.8.8.tar.gz:

[root@lamp ~]# tar vxf cmake-2.8.8.tar.gz

[root@lamp ~]# cd cmake-2.8.8

[root@lamp cmake-2.8.8]# ./configure

[root@lamp cmake-2.8.8]# make && make install

...........

-- Installing: /usr/local/doc/cmake-2.8/ccmake.docbook

-- Installing: /usr/local/share/aclocal/cmake.m4     #编译安装cmake完成



2.3、使用cmake编译安装mysql5.5.28:

清理此前的编译所生成的文件,则需使用如下命令:make clean 

[root@lamp ~]# tar vxf mysql-5.5.28.tar.gz

[root@lamp ~]# cd mysql-5.5.28

[root@lamp mysql-5.5.28]# cmake    .    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql     -DMYSQL_DATADIR=/mydata/data -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 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock  -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci


-DCMKE_INSTALL_PREFIX=安装路径,-DMYSQL_DATADIR=数据存放路径,-DSYSCONFDIR=配置文件路径,

-DWITH_INNOBASE_STORAGE_ENGINE=1 (是否包含INNOBASE引擎1表示包含0表示不包含),

-DWITH_ARCHIVE_STORAGE_ENGINE=1 (是否包含ARCHIVE引擎1表示包含0表示不包含),

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 (是否包含BLACKHOLE空洞引擎1表示包含0表示不包含),


.........

-- Performing Test HAVE_PEERCRED - Success

-- Configuring done

-- Generating done

-- Build files have been written to: /root/mysql-5.5.28   #编译完成

[root@lamp mysql-5.5.28]# make  && make install

.......

-- Installing: /usr/local/mysql/man/man1/mysql.1

-- Installing: /usr/local/mysql/man/man1/mysql-test-run.pl.1

-- Installing: /usr/local/mysql/man/man8/mysqld.8      #安装mysql完成



2.4、配置mysql脚本让其开机自动启动及运行:

[root@lamp mysql-5.5.28]# chown -R :mysql /usr/local/mysql  #更改组为mysql

[root@lamp mysql-5.5.28]# cd /usr/local/mysql

[root@lamp mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data  #初始化mysql,指定用户和数据目录

Installing MySQL system tables...

OK

Filling help tables...

OK


To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system


PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:


./bin/mysqladmin -u root password 'new-password'

./bin/mysqladmin -u root -h lamp password 'new-password'


Alternatively you can run:

./bin/mysql_secure_installation


which will also give you the option of removing the test

databases and anonymous user created by default.  This is

strongly recommended for production servers.


See the manual for more instructions.


You can start the MySQL daemon with:

cd . ; ./bin/mysqld_safe &


You can test the MySQL daemon with mysql-test-run.pl

cd ./mysql-test ; perl mysql-test-run.pl

Please report any problems with the ./bin/mysqlbug script!   #初始化完成 


[root@lamp mysql]# mv /etc/my.cnf /etc/my.cnf.back   #把原系统中配置文档改名

[root@lamp mysql]# cp support-files/my-large.cnf /etc/my.cnf  #复制配置文档至/etc目录

[root@lamp mysql]# cp support-files/mysql.server /etc/init.d/mysqld  #复制启动脚本至/etc/init.d目录中

[root@lamp mysql]# chkconfig --add mysqld  #把mysqld启动脚本加到开机启动列表

[root@lamp mysql]# chkconfig --list mysqld  #查看mysqld脚本是否开机启动

mysqld         0:off1:off2:on3:on4:on5:on6:off

[root@lamp mysql]# service mysqld start   #启动mysql脚本

Starting MySQL...             [  OK  ]

[root@lamp mysql]# vim /etc/profile.d/mysql.sh  #编辑环境变量使得mysql命令在PATH变量中

export PATH=$PATH:/usr/local/mysql/bin    #新增该行内容

[root@lamp mysql]# . /etc/profile.d/mysql.sh   #读取mysql.sh脚本的内容 

[root@lamp mysql]# echo $PATH  #输出PATH变量内容

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin  #PATH变量中的路径已生效



三、MySQL 启动及簡單应用:

[root@lamp mysql]# mysql   #启动mysql客户端程序

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.5.28-log Source distribution

mysql> SHOW DATABASES;  #查看基本数据

mysql> SHOW ENGINES;  #查看支持的引擎

| Engine | Support | Comment | Transactions | XA | Savepoints |

| MyISAM | YES  | MyISAM storage engine  | NO | NO  | NO   |

| PERFORMANCE_SCHEMA | YES   | Performance Schema  | NO  | NO   | NO |

| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys ...

| BLACKHOLE|YES|/dev/null storage engine (anything you write to it disappears)|YES|YES| YES|

| CSV | YES | CSV storage engine| MRG_MYISAM | ...

| ARCHIVE | YES | Archive storage engine  | NO   | NO   | NO  |

| MEMORY | YES | Hash based, stored in memory, useful for temporary tables |...

+----------+---------+--------------------------+--------------+------+------------+

8 rows in set (0.00 sec)

 

mysql> \q   #退出mysql

Bye

[root@lamp mysql]# vim /etc/my.cnf  #修改mysql的配置文档

[client]

#password      = your_password

port         = 3306

socket       = /tmp/mysql.sock

# The MySQL server

[mysqld]

port        = 3306

socket      = /tmp/mysql.sock

skip-external-locking

key_buffer_size = 256M

max_allowed_packet = 1M

table_open_cache = 256

sort_buffer_size = 1M

read_buffer_size = 1M

read_rnd_buffer_size = 4M

myisam_sort_buffer_size = 64M

thread_cache_size = 8 

query_cache_size= 16M

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 8    #线程数量需要与实际一样  

datadir = /mydata/data    #新增此行,指定mysql数据路径


[root@lamp mysql]# mysql

mysql> USE mysql;   #设定mysql数据库为默认database

Database changed

mysql> SELECT User,Host,Password FROM user;  #查询user表中关于User,Host,密码三个字段的信息

+------+-----------+----------+

| User | Host    | Password |

+------+-----------+----------+

| root | localhost |       |

| root | lamp    |       |

| root | 127.0.0.1 |       |

| root | ::1     |       |

|    | localhost |       |

|    | lamp    |       |

+------+-----------+----------+

6 rows in set (0.00 sec)

mysql> DROP USER ''@localhost;  #删除初始的匿名登录用户

Query OK, 0 rows affected (0.00 sec)

mysql> DROP USER ''@lamp;     #删除初始的匿名登录用户

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT User,Host,Password FROM user;  #再次查看,匿名用户已经删除成功

+------+-----------+----------+

| User | Host      | Password |

+------+-----------+----------+

| root | localhost |         |

| root | lamp    |         |

| root | 127.0.0.1 |         |

| root | ::1     |         |

+------+-----------+----------+

4 rows in set (0.00 sec)

mysql> UPDATE user SET Password=PASSWORD('123456') WHERE user='root'; #设定root用户的密码

Query OK, 4 rows affected (0.02 sec)

Rows matched: 4  Changed: 4  Warnings: 0

mysql> SELECT User,Host,Password FROM user; #再次查看,所有root用户已经设置好密码

+------+-----------+-------------------------------------------+

| User | Host   | Password             |

+------+-----------+-------------------------------------------+

| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| root | lamp  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| root | ::1   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

+------+-----------+-------------------------------------------+

4 rows in set (0.00 sec)

mysql> FLUSH PRIVILEGES;  #使设置立即生效

Query OK, 0 rows affected (0.00 sec)

[root@lamp mysql]# mysql  #再次登录mysql,提示错误,因为已经设定了密码。

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

[root@lamp mysql]# mysql -uroot -p  #从本机登录mysql,输入刚设定的密码

Enter password:  123456

mysql>    #正常登录mysql




3.2. 如何设定本机本地登录mysql不用输入密码:


在家目录下,新建一个.my.cnf文档,里面添加以下内容:

[root@lamp ~]# vim .my.cnf

[client]

user=root

host=localhost

password=123456

#即使root用户设定了密码,也可以免密码直接读取家目录下面的.my.cnf的隐藏文件进行登录认证。




3.3. 为innodb引擎设置了每表都单独为一个空间


[root@lamp ~]# cd /mydata/data/mysql

[root@lamp mysql]# ll

total 1016

-rw-rw----. 1 mysql mysql 8820 May 11 16:12 columns_priv.frm

-rw-rw----. 1 mysql mysql   0 May 11 16:12 columns_priv.MYD

-rw-rw----. 1 mysql mysql 4096 May 11 16:12 columns_priv.MYI

-rw-rw----. 1 mysql mysql 9582 May 11 16:12 db.frm   #MyISAM引擎 表的结构文件

-rw-rw----. 1 mysql mysql 880 May 11 16:12 db.MYD  #MyISAM引擎 存放数据的文件

-rw-rw----. 1 mysql mysql 5120 May 11 16:12 db.MYI   #MyISAM引擎 数据索引文件

-rw-rw----. 1 mysql mysql 10223 May 11 16:12 event.frm

-rw-rw----. 1 mysql mysql 0 May 11 16:12 event.MYD

-rw-rw----. 1 mysql mysql 2048 May 11 16:12 event.MYI

...

mysql> mysql

mysql> SHOW VARIABLES LIKE '%innodb%';  #查看关于innodb引擎的相关变量参数

+----------------------------+------------------------+

| Variable_name      | Value    |

+----------------------------+------------------------+

| have_innodb        | YES      |

| ignore_builtin_innodb    | OFF     |

| innodb_adaptive_flushing    | ON    |

| innodb_adaptive_hash_index   | ON     |

| innodb_additional_mem_pool_size | 8388608 |

| innodb_autoextend_increment   | 8     |

| innodb_autoinc_lock_mode     | 1   |

| innodb_buffer_pool_instances  | 1    |

| innodb_buffer_pool_size     | 134217728 |

| innodb_change_buffering    | all     |

| innodb_checksums        | ON       |

| innodb_commit_concurrency  | 0    |

| innodb_concurrency_tickets  | 500   |

| innodb_data_file_path    | ibdata1:10M:autoextend |

| innodb_data_home_dir    |        |

| innodb_doublewrite     | ON     |

| innodb_fast_shutdown   | 1       |

| innodb_file_format    | Antelope     |

| innodb_file_format_check  | ON    |

| innodb_file_format_max  | Antelope   |

| innodb_file_per_table   | OFF | #该项表示innodb引擎是否每个表都开启独立空间

| innodb_flush_log_at_trx_commit  | 1     |

| innodb_flush_method    |                 

[root@lamp mysql]# vim /etc/my.cnf  #编辑mysql配置文件,开启innodb引擎对于每个表的独立空间


#innodb_log_file_size = 64M

#innodb_log_buffer_size = 8M

#innodb_flush_log_at_trx_commit = 1

#innodb_lock_wait_timeout = 50

innodb_file_per_table = 1  # 增加此行,1为启用,0为禁用

[root@lamp mysql]# service mysqld restart  #重启mysql服务

Shutting down MySQL.              [  OK  ]

Starting MySQL..                [  OK  ]


[root@lamp mysql]# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

...

mysql> SHOW VARIABLES LIKE '%innodb%';

+---------------------------------+------------------------+

| Variable_name         | Value        |

+---------------------------------+------------------------+

...

| innodb_file_format_max  | Antelope   |

| innodb_file_per_table   | ON |   #已经为innodb引擎设置了每表都单独为一个空间

| innodb_flush_log_at_trx_commit  | 1   |

| innodb_flush_method    |    |




mysql> CREATE DATABASE mydb;  #创建新的数据库

Query OK, 1 row affected (0.00 sec)


mysql> USE mydb; #设定mydb为默认数据库

Database changed

mysql> CREATE TABLE testdb(id INT NOT NULL,name CHAR(30)); #建立testdb表2行

Query OK, 0 rows affected (0.03 sec)

mysql> SHOW DATABASES;

+--------------------+

| Database       |

+--------------------+

| information_schema |

| mydb         |

| mysql         |

| performance_schema |

| test         |

+--------------------+

5 rows in set (0.00 sec)


mysql> SHOW TABLES FROM mydb;  #mydb数据库中包含的表 

+----------------+

| Tables_in_mydb |

+----------------+

| testdb     |

+----------------+

1 row in set (0.00 sec)


[root@lamp ~]# cd /mydata/data/mydb

[root@lamp mydb]# ll -h

total 112K

-rw-rw----. 1 mysql mysql   61 Apr 18 15:25 db.opt

-rw-rw----. 1 mysql mysql 8.4K Apr 18 15:27 testdb.frm   #test表的结构文件存放

-rw-rw----. 1 mysql mysql  96K Apr 18 15:27 testdb.ibd  #test表的数据和索引文件

[root@lamp ~]# vim test.sql

CREATE DATABASE testdb;      #创建一个testdb数据库

CREATE TABLE testdb.tb1(id INT,name CHAR(20)); #在testdb库中建立tb1表。


mysql> \. /root/test.sql  #把test.sql中的内容导入到mysql内执行,

           或者不进入数据,直接执行:mysql < /root/test.sql 输入重定向一样。

Query OK, 1 row affected (0.00 sec)

Query OK, 0 rows affected (0.02 sec)


mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| test               |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)


mysql> USE testdb

Database changed

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| tb1              |

+------------------+

1 row in set (0.00 sec)

mysql> DROP DATABASE testdb;  #删除testdb库

Query OK, 1 row affected (0.01 sec)



附1:

编译mysql出现CMake Error atcmake/readlineNaNake:83

-- Could NOT find Curses  (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)

CMake Error at cmake/readlineNaNake:83 (MESSAGE):

  Curses library not found.  Please installappropriate package,

 

remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu,package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.

Call Stack (most recent call first):

  cmake/readlineNaNake:127 (FIND_CURSES)

  cmake/readlineNaNake:217(MYSQL_USE_BUNDLED_LIBEDIT)

  CMakeLists.txt:257 (MYSQL_CHECK_READLINE) 

 

-- Configuring incomplete, errors occurred!

 
该报错原因是未安装ncurses-devel,运行下面命令

第一步:安装

#yum -y install ncurses-devel

 

第二步:删除CMakeCache.txt

这里是因为,我们在多次运行cmake有个文件我们需要删除,删除当前目录下CMakeCache.txt文件并重新编译,再次运行cmake命令就会正常!

[root@mysql mysql-5.6.12]# rm  -rf CMakeCache.txt

 

或者通过find命令找到所有CMakeCache.txt文档的位置

#find / -name CMakeCache.txt
然后全部删除:

# rm -rf/usr/local/src/cmake-2.8.6/Tests/Complex/Cache/CMakeCache.txt

# rm -rf/usr/local/src/cmake-2.8.6/Tests/ComplexOneConfig/Cache/CMakeCache.txt

# rm -rf /usr/local/src/cmake-2.8.6/Tests/ComplexRelativePaths/Cache/CMakeCache.txt

# rm -rf /usr/local/src/mysql-5.5.18/CMakeCache.txt

全部删除后再重新cmake就OK了。



附2:

mysql5.5.28.tar.gz下载地址:http://down.51cto.com/data/700556

cmake-2.8.8.tar.gz下载地址:http://vdisk.weibo.com/s/usonnBN1894A3 



---end---

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯