1. 程式人生 > >CentOS6.5下編譯安裝mysql-5.6.27

CentOS6.5下編譯安裝mysql-5.6.27

MySQL的安裝分為三種:
1、RPM包安裝;(MySQL-5.6.27-1.linux_glibc2.5.i386.rpm-bundle.tar)
2、二進位制包安裝;(mysql-5.6.27-linux-glibc2.5-i686.tar.gz)
3、原始碼安裝。 (mysql-5.6.27.tar.gz)
原始碼編譯安裝,可以更靈活的調整引數,並且能夠在同一個伺服器上部署多個不同版本的MySQL資料庫系統。對於生產環境,就需要根據實際情況作選擇,對於需要大批量部署資料庫伺服器的環境,可以在一臺機器上原始碼編譯後,打包成RPM格式,而後其他伺服器直接使用這個定製化編譯過的版本進行快速安裝。
MySQL資料庫的原始碼安裝包從5.5版本開始,原始碼編譯配置工具換成了CMake。在編譯工程中還需要make和gcc兩個程式用於原始碼編譯。後兩者一般系統都會自帶,唯有CMake,如果當前系統配置了yum,那麼直接執行yum install cmake即可。如果當前系統既無yum也沒有cmake命令,那麼就需要先編譯安裝CMake。

##安裝CMake
[
[email protected]
tmp]# ll cmake-2.8.8.tar.gz -rw-r--r--. 1 root root 5691656 12月 11 17:55 cmake-2.8.8.tar.gz [[email protected] tmp]# tar zxf cmake-2.8.8.tar.gz [[email protected] tmp]# cd cmake-2.8.8 [[email protected] cmake-2.8.8]# ./configure --------------------------------------------- CMake 2.8.8, Copyright 2000-2011 Kitware, Inc. --------------------------------------------- Error when bootstrapping CMake: Cannot find appropriate C compiler on this system. ##缺少gcc包 Please specify one using environment variable CC. See cmake_bootstrap.log for compilers attempted. --------------------------------------------- Log of errors: /tmp/cmake-2.8.8/Bootstrap.cmk/cmake_bootstrap.log --------------------------------------------- [
[email protected]
tmp]# rpm -qa | grep make ##檢查發現make有了 make-3.81-20.el6.i686 [[email protected] tmp]# rpm -qa | grep gcc ##檢查發現gcc缺少 libgcc-4.4.7-4.el6.i686 [[email protected] tmp]# yum install gcc ##安裝 [[email protected] tmp]# yum install gcc-c++ [[email protected]
tmp]# rpm -qa | grep gcc gcc-c++-4.1.2-46.el5.i386 gcc-4.1.2-46.el5.i386 libgcc-4.4.7-4.el6.i686 [[email protected] cmake-2.8.8]# ./configure [[email protected] cmake-2.8.8]# gmake && make install [[email protected] cmake-2.8.8]# cmake ##安裝完成後就多了個cmake命令 cmake version 2.8.8 Usage cmake [options] <path-to-source> cmake [options] <path-to-existing-build> ...... ##新增使用者和組 [[email protected] ~]# groupadd mysql [[email protected] ~]# useradd -r -g mysql mysql ##設定使用者作業系統資源的限制 [[email protected] ~]# vi /etc/security/limits.conf mysql soft nproc 2047 mysql hard nproc 16384 mysql soft nofile 1024 mysql hard nofile 65536 ##編譯mysql [[email protected] tmp]# ll mysql-5.6.27.tar.gz -rw-r--r-- 1 root root 33327156 Dec 11 06:43 mysql-5.6.27.tar.gz [[email protected] tmp]# tar zxf mysql-5.6.27.tar.gz [[email protected] tmp]# cd mysql-5.6.27 [[email protected] tmp]# ##執行cmake命令開始編譯 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ ##軟體的安裝路徑 -DDEFAULT_CHARSET=utf8 \ ##MySQL服務的預設字符集 -DDEFAULT_COLLATION=utf8_general_ci \ ##MySQL服務的預設校隊規則 -DEXTRA_CHARSETS=all \ ##指定附加的字符集 -DENABLED_LOCAL_INFILE=1 \ ##是否允許客戶端本地載入資料到MySQL服務端 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ ##編譯INNODB儲存引擎 -DWITH_MYISAM_STORAGE_ENGINE=1 \ ##編譯MYISAM儲存引擎(MyISAM、MEMORY、MERGE、CSV這四種引擎預設就會編譯) -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ ##編譯BLACKHOLE儲存引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ ##編譯ARCHIVE儲存引擎 -DWITH_FEDERATED_STORAGE_ENGINE=1 \ ##編譯FEDERATED儲存引擎 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ ##不編譯EXAMPLE儲存引擎 -DWITH_PARTITION_STORAGE_ENGINE=1 \ ##支援分割槽 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ ##編譯PERFORMANCE_SCHEMA -DCOMPILATION_COMMENT='ZSH for mysqltest' \ ##指定編譯資訊 -DWITH_READLINE=1 \ ##指定輸入輸出的處理方式(與能否輸入中文有關) -DMYSQL_TCP_PORT=3306 \ ##指定預設埠 -DMYSQL_USER=mysql \ ##指定使用者為mysql -DMYSQL_DATADIR=/data/3306 \ ##指定MySQL資料庫資料檔案的儲存路徑(等效於:datadir=/data/3306) -DSYSCONFDIR=/data/3306 \ ##指定MySQL引數檔案my.cnf的預設路徑(等效於:--defaults-file=/data/3306/my.cnf) -DMYSQL_UNIX_ADDR=/data/3306/mysql.sock ##指定套接字檔案的儲存路徑(等效於:socket=/data/3306/mysql.sock) ##cmake命令執行成功的話,最後輸出資訊類似: -- Configuring done -- Generating done -- Build files have been written to: /tmp/mysql-5.6.27 ##如果編譯過程中出現錯誤,或者引數變更要重新配置,可以通過rm命令,刪除原始碼包目錄下的CMakeCache.txt檔案,而後重新執行cmake命令,或者乾脆將mysql原始碼目錄刪除,再重新解壓並進行編譯。 [[email protected] mysql-5.6.27]# make && make install ##如果前面一步操作沒有碰到錯誤的話,原始碼編譯方式安裝mysql就成功了。 [[email protected] mysql-5.6.27]# chown -R mysql:mysql /usr/local/mysql ##將/usr/local/mysql目錄打包壓縮,得到的檔案就相當於是一套二進位制版本的MySQL了。 [[email protected] mysql-5.6.27]# vi /etc/profile export PATH=/usr/local/mysql/bin:$PATH ##建立資料目錄 [[email protected] ~]# mkdir -p /data/3306 [[email protected] ~]# chown -R mysql:mysql /data ##初始化Mysql [[email protected] mysql]# cd /usr/local/mysql [[email protected] mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306 ##修改Mysql主配置檔案 [[email protected] mysql]# cd /usr/local/mysql [[email protected] mysql]# cp support-files/my-default.cnf /data/3306/my.cnf [[email protected] 3306]# cd /data/3306/ [[email protected] 3306]# vi my.cnf [client] port = 3306 socket = /data/3306/mysql.sock default-character-set = utf8 [mysqld] port = 3306 user = mysql socket = /data/3306/mysql.sock pid-file = /data/3306/mysql.pid basedir = /usr/local/mysql datadir = /data/3306 log-bin = /data/3306/mysql-bin lower_case_table_names=1 max_connections=1000 character_set_server=utf8 character_set_client=utf8 [mysql] default-character-set=utf8 ##為mysql提供服務指令碼 [[email protected] 3306]# cd /usr/local/mysql [[email protected] mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld ##啟動Mysql [[email protected] mysql]# service mysqld start Starting MySQL.............................................[ OK ] [[email protected] mysql]# service mysqld status MySQL running (28579) [ OK ] [[email protected] mysql]# netstat -tulnp | grep mysql tcp 0 0 :::3306 :::* LISTEN 28579/mysqld ##登入Mysql測試一下 [[email protected] 3306]# mysql -uroot -p ##第一次登陸密碼為空 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.27-log ZSH for mysqltest ##看見編譯資訊中的“ZSH for mysqltest”了嗎? Copyright (c) 2000, 2015, 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> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> use test Database changed mysql> create table t1 (id int ,name varchar(10)); Query OK, 0 rows affected (4.90 sec) mysql> insert into t1 values(1,'a'),(2,'b'),(3,'c'); Query OK, 3 rows affected (1.29 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from t1; +------+------+ | id | name | +------+------+ | 1 | a | | 2 | b | | 3 | c | +------+------+ 3 rows in set (0.00 sec) ##修改密碼,刪除空使用者(密碼為空) mysql> select user,host,password from mysql.user; +------+-----------+----------+ | user | host | password | +------+-----------+----------+ | root | localhost | | | root | db | | | root | 127.0.0.1 | | | root | ::1 | | | | localhost | | | | db | | +------+-----------+----------+ 6 rows in set (0.00 sec) mysql> update mysql.user set password = PASSWORD('123') where user = 'root'; Query OK, 4 rows affected (0.01 sec) Rows matched: 4 Changed: 4 Warnings: 0 mysql> select user,host,password from mysql.user; +------+-----------+-------------------------------------------+ | user | host | password | +------+-----------+-------------------------------------------+ | root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | root | db | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | root | 127.0.0.1 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | root | ::1 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | | localhost | | | | db | | +------+-----------+-------------------------------------------+ 6 rows in set (0.00 sec) mysql> drop user ''@localhost; Query OK, 0 rows affected (0.00 sec) mysql> drop user ''@db; Query OK, 0 rows affected (0.01 sec) mysql> select user,host,password from mysql.user; +------+-----------+-------------------------------------------+ | user | host | password | +------+-----------+-------------------------------------------+ | root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | root | db | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | root | 127.0.0.1 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | root | ::1 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | +------+-----------+-------------------------------------------+ 4 rows in set (0.01 sec) mysql> update mysql.user set host='%' where user='root' and host='localhost'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select user,host,password from mysql.user; +------+-----------+-------------------------------------------+ | user | host | password | +------+-----------+-------------------------------------------+ | root | % | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | root | db | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | root | 127.0.0.1 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | root | ::1 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | +------+-----------+-------------------------------------------+ 4 rows in set (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)