linux下的Mysql编译安装与基本使用

Posted 郭大侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下的Mysql编译安装与基本使用相关的知识,希望对你有一定的参考价值。

 

一、大致操作步骤

  环境介绍:

       OS:center OS6.5

  mysql:5.6版本

  

1.关闭防火墙

    查看防火墙状态:service iptables status

    

    这样就意味着没有关闭。

    运行以下命令关闭防火墙  service iptables stop,然后再次查看防火墙状态

    

       

    运行这条命令,可以彻底关闭:chkconfig iptables off

    运行:vi /etc/selinux/config

    

    这个改成disabled

 

2.修改配置文件

    more /etc/sysctl.conf

 

3.检查是否安装了mysql

    rpm -qa |grep mysql

    

    已经装了,那卸载装5.6吧,发现报错,说是有依赖,不能直接删

    

     那么我们用:yum remove mysql*    

 

4.下载mysql包

4.1 下载

    进入www.mysql.com,然后选择download

       

 

    然后找到社区版

      

    然后我们找到社区版的服务

        

 

    然后找到我们要找的版本

    

 

    选择源码编译和常用Linux操作系统

    

 

4.2 上传并且安装

 【1】在虚拟机中挂载光驱,设置光驱就不细说了,看图

    

  【2】挂载

    mount /dev/cdrom /mnt   

    #把光盘挂载到  /mnt目录下

  【3】复制到本地  

    mkdir -p /redhat/mnt

    cp -r/mnt /redhat/mnt

  【4】配置yun源

    cd /etc/yum.repos.d/

    ll

     

 

     #新建一个文件

    vim base.repo

    

    

     

    #安装好rz,选择mysql文件即上传到当前目录去了。

    yum install -y lrzsz

    rz

      

 

5.添加用户和组

    groupadd mysql    # (useradd:http://man.linuxde.net/useradd)

    useradd -d /home/mysql -g mysql -m mysql    #建立好之后可以用id mysql查看

    su - mysql       #切换到mysql用户

6.配置环境变量     

       vim  ~/.bash_profile       #配置mysql环境变量

     

    #我准备把mysql放在这个目录下面

7.创建目录及授权

      #然后构建mysql数据目录

mkdir -p /u01/my3306/data
mkdir -p /u01/my3306/log/iblog
mkdir -p /u01/my3306/log/binlog
mkdir -p /u01/my3306/run
mkdir -p /u01/my3306/tmp

    #用户授权/目录授权

    chown -R mysql:mysql /u01/my3306/
    chmod -R 755 /u01/my3306/

 

8.压缩mysql5.6

  tar -xzvf mysql-5.6.41.tar.gz     

   

9.配yum源,安装cmake

   #这里我们的4.2步骤已经配置yum源

  yum install -y cmake gcc gcc-c++ ncurse-devel bison zlib libxml openssl

  #解析:(1)gcc gcc-c++:编译用 (2)ncurse-devel:用于终端操作开发包 (3)bison:mysql的语法解析 (4)zlib :用zlib进行压缩 (5)libxml :以xml方式输出支持 (6)openssl:安全套接字通信

10.编译并安装

  (1)进入mysql解压后的目录(因为 cmake目录在这里)

  (2)编译

  rm CMakeCache.txt    #先把源码目录中清理一下这个文件

  然后在执行如下命令:

cmake \\
-DCMAKE_INSTALL_PREFIX=/u01/my3306 \\
-DMYSQL_UNIX_ADDR=/u01/my3306/run/mysql.sock \\
-DDEFAULT_CHARSET=utf8 \\
-DDEFAULT_COLLATION=utf8_general_ci \\
-DWITH_MYISAM_STORAGE_ENGINE=1 \\
-DWITH_INNOBASE_STORAGE_ENGINE=1 \\
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \\
-DWITH_MEMORY_STORAGE_ENGINE=1 \\
-DWITH_READLINE=1 \\
-DENABLED_LOCAL_INFILE=1 \\
-DMYSQL_DATADIR=/u01/my3306/data\\
-DMYSQL_USER=mysql \\
-DMYSQL_TCP_PORT=3306

  --参数释义(深入请参考:http://blog.51cto.com/laowafang/1294964)

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \\         (反斜杠意思是换行,指定安装目录)
          -DMYSQL_DATADIR=/data/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 \\        (指定编译库)
          -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \\     (指定套接字路径)
          -DDEFAULT_CHARSET=utf8 \\             (指定默认字符集)
          -DDEFAULT_COLLATION=utf8_general_ci      (指定默认编码)
          -DWITH_BOOST=/usr/local/boost       (指定boost库位置)

发现了报错,如下:

    

yum install ncurses-devel    #命令装一下这个包

#然后再cmake,又报错如下

CMake Error: The source directory does not appear to contain CMakeLists.txt.

意思是我没有进入mysql目录,找不到cmake文件,进入一下下面的目录

    

再次cmake还是报错

    

因为开始编译过,有清除缓存文件

rm CMakeCache.txt       #需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE

(3)make  #编译 或者3-4可以合成一句  make && make install

(4)make install

 

 

11.mysql参数配置

[mysql] 
# CLIENT # 
port                          = 3306 
socket                        = /u01/my3306/mysql.sock 
default-character-set          = utf8 
[mysqld] 
# GENERAL # 
user                          = mysql 
default_storage_engine        = InnoDB 
socket                        = /u01/my3306/mysql.sock 
pid-file                      = /u01/my3306/mysql.pid 
character-set-server          = utf8 
# MyISAM # 
key_buffer_size                = 32M 
myisam_recover                = FORCE,BACKUP 
# SAFETY # 
max_allowed_packet            = 16M 
max_connect_errors            = 1000000 
skip_name_resolve 
# DATA STORAGE # 
datadir                        = /u01/my3306/data
# BINARY LOGGING # 
log_bin                        = /u01/my3306/log/mysql-bin
expire_logs_days              = 14 
sync_binlog                    = 1 
# CACHES AND LIMITS # 
tmp_table_size                = 32M 
max_heap_table_size            = 32M 
query_cache_type              = 0 
query_cache_size              = 0 
max_connections                = 500 
thread_cache_size              = 50 
open_files_limit              = 65535 
table_definition_cache        = 1024 
table_open_cache              = 2048 
# INNODB # 
innodb_flush_method            = O_DIRECT 
innodb_log_files_in_group      = 2 
innodb_log_file_size          = 256M 
innodb_flush_log_at_trx_commit = 1 
innodb_file_per_table          = 1 
innodb_buffer_pool_size        = 256M 
innodb_thread_concurrency      = 12 
#thread_handling                = pool-of-threads 
#auto_increment_increment      = 2 
#auto_increment_offset          = 0 
# LOGGING # 
log_error                      = /u01/my3306/log/mysql-error.log 
log_queries_not_using_indexes  = 1 
slow_query_log                = 1 
slow_query_log_file            = /u01/my3306/log/mysql-slow.log

超简单版如下:

[mysqld] 
# GENERAL # 
port                          = 3306 
datadir                        = /u01/my3306/data

配置好文件,命名为my.cnf,然后rz拷贝到/u01/my3306/下

 

 

12.初始化mysql

 ./scripts/mysql_install_db --defaults-file=/u01/my3306/my.cnf --datadir=/u01/my3306/data/ -user=mysql

这里在my3306也就是我们的mysql目录下跑,

--defaults-file=/u01/my3306/my.cnf   #默认文件引用 my3306下的my.cnf

 

13.启动mysql

进入/u01/my3306/bin 目录下

ll  查看,有个mysqld_safe,启用它,如果mysql进程被误删一类的,它会自动重启mysql进程,实现代码如下

./mysql_safe --defaults-file=/u01/my3306/my.cnf --user=mysql &

 查看mysql进程

ps -ef |grep 3306

#效果如下
 
#看图中 进程号为3530,那么我们要查看进程中的所有线程命令如下

pstack 3530
#如下图,我这里一共28个线程

 

 

14.登录mysql

  source .bash_profile    #引用一下环境变量文件

  

(1)直接输入mysql

  它可以进入,但是它用的操作系统认证

  

 

 (2)常规方式登录

mysql -h127.0.0.1 -uroot

因为初始root没有设置密码,所以这里不需要输入密码;

 

到此,安装过程就大功告成了!

15.安装完成后的优化(删除多余数据库与账户)

15.1、查看数据库的版本信息

1
2
3
4
5
6
7
MariaDB [(none)]> select version();
+----------------+
| version()      |
+----------------+
| 5.5.52-MariaDB |
+----------------+
1 row in set (0.18 sec)

15.2、删除多余的账号(除root和localhost的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
MariaDB [(none)]> use mysql
MariaDB [mysql]> select user,host from mysql.user;
+------+------------------------+
| user | host                   |
+------+------------------------+
| root | 127.0.0.1              |
| root | ::1                    |
|      | localhost              |
| root | localhost              |
|      | lvs-dr01.saltstack.com |
| root | lvs-dr01.saltstack.com |
+------+------------------------+
6 rows in set (0.03 sec)
MariaDB [mysql]> delete from mysql.user where (user,host) not in (select \'root\',\'localhost\');
Query OK, 5 rows affected (0.05 sec)
MariaDB [mysql]> select user,host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | localhost |
+------+-----------+
1 row in set (0.05 sec)

15.3、修改mysql默认的mysql管理账号

修改默认的mysql管理账号(root改为mysql,并设置新密码为redhat12345)

1
2
3
4
5
6
7
8
9
MariaDB [mysql]> update user set user="admin" where user="root";
MariaDB [mysql]> update mysql.user set user=\'admin\',password=password(\'redhat12345\');
Query OK, 1 row affected (0.08 sec)
Rows matched: 1  Changed: 1  Warnings: 0
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.03 sec)
[root@LVS-DR01 ~]# mysql -uadmin -p\'redhat12345\'
MariaDB [(none)]> user mysql;
MariaDB [mysql]> show tables;

继续查询:

1
2
3
4
5
6
7
MariaDB [mysql]> select user,host from mysql.user;
+-------+-----------+
| user  | host      |
+-------+-----------+
| admin | localhost |
+-------+-----------+
1 row in set (0.00 sec)

15.4、删除test数据库

为什么要删?新建MySQL数据库后,默认创建的test数据库权限比较怪异,所有可连接的用户都能够拥有权限访问该库

1
2
3
4
5
6
7
8
9
10
11
MariaDB [mysql]> drop database test;
MariaDB [mysql]> flush privileges;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.06 sec)

15.5、优化权限字典表mysql.db

如下所示:新建MySQL数据库后,默认创建的test数据库权限比较怪异,所有可连接的用户都能够拥有权限访问该库,并操作其中的对象,Host为%,User为空,说明了不受限制,所有能连接到MySQL的用户,全部拥有test及test开头的数据库的几乎所有权限。

 

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
MariaDB [mysql]> select * from mysql.db where db like \'test%\' \\G
*************************** 1. row ***************************
                 Host: %
                   Db: test
                 User: 
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: N
         Execute_priv: N
           Event_priv: Y
         Trigger_priv: Y
*************************** 2. row ***************************
                 Host: %
                   Db: test\\_%
                 User: 
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: N
         Execute_priv: N
           Event_priv: Y
         Trigger_priv: Y
2 rows in set (0.31 sec)
优化的操作:
MariaDB [mysql]> truncate table mysql.db;
Query OK, 0 rows affected (0.01 sec)
MariaDB [mysql]> select * from mysql.db where db like \'test%\' \\G
Empty set (0.00 sec)

15.6、如何优化/root/.mysql_history文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@LVS-DR01 ~]# tail -20 ~/.mysql_history 
flush privileges;
select user,host from mysql.user;
delete from mysql.user where user="\'molewan1\'@\'10.10.10.%\'";
delete from mysql.db where user=\'molewan1\'@\'10.10.10.%\';
select user,host from mysql.user;
delete from mysql.user where user=molewan1;
delete from mysql.user where user=\'molewan1@10.10.10.%\';
flush privileges;
select user,host from mysql.user;
delete from mysql.user where user="molewan1" and host ="10.10.10.%";
flush privileges;
select user,host from mysql.user;
delete from mysql.user where user="molewan" and host="10.10.10.%";
flush privileges;
create user molewan@\'10.10.10.%\' identified by \'molewan\';
select user,host from mysql.user;
desc mysql.user;
update mysql.user set password=password(\'admin\') where user=\'admin\' and host=\'localhost\';
flush privileges;
\\q

说明:在Linux/Unix系统下,使用mysql命令行工具执行的所有操作,都会被记录到一个名为.mysql_history的文件中,该文件默认保存在当前用户的根目录下

这个设定原本是为了提升mysql命令行操作体验,在mysql中操作命令就可以上下翻动了,但某些情况下缺会造成隐患。

15.7、如何历史记录消除隐患

1
2
3
4
5
6
7
8
方法1:基于DB层的操作
修改MYSQL_HISTFILE环境变量,将其值改为/dev/null,这样所有的操作都会被输出到空,操作的历史
自然不会被保留。
方法2:基于系统层操作
仍旧保留这个文件,但是改文件实际上未/dev/null的软链接,这样所有的操作都会被输出到空,操作的历史自然不会被保留。
ln -f -s /dev/null ~/.mysql_history
[root@LVS-DR01 ~]# tail -20 ~/.mysql_history 
这时候就没有输出了

到此,安装完成后的基本优化已经完成

 

 

 

附加:基本操作

(1)查看登录所在实例下的所有数据库  show databases;

  

 

(2)查看所有的日志变量配置情况

show variables like \'%log%\';

  

 

(3)如果要在其他机器上装一样的mysql,直接拿过去用就OK了,但是server_id要改一下

  

 (4)查看当前数据库上下文

  select database();

  

(5)查看当前用户

  select user();

  

(6)查看当前数据库下所有表

  show tables;

  

 (7)修改mysql提示符

  登录mysql时:mysql -uroot -p --prompt \'\\u@test2_db \\r:\\m:\\s->\'

  

  登录mysql之后:prompt \\u@test_db \\r:\\m:\\s->

  

  注意:它是临时生效,重新登录就没了,要永久生效需要配置在my.cnf的配置文件中的  [mysql] 模块下;

  

 

  

 

以上是关于linux下的Mysql编译安装与基本使用的主要内容,如果未能解决你的问题,请参考以下文章

linux下的mysql客户端怎么安装

mysql安装与配置

MySQL在Django框架下的基本操作(MySQL在Linux下配置)

windows下的Mysql安装与基本使用

Linux平台下安装MySQL

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途