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编译安装与基本使用的主要内容,如果未能解决你的问题,请参考以下文章
MySQL在Django框架下的基本操作(MySQL在Linux下配置)
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途