mysql的安装、基本操作(2016.6.04第六周课程笔记)
–rhel版本自带两个数据库,分别为mysql和postgresql
# rm /var/lib/mysql/* -rf --删除rpm版mysql数据库的数据文件 # rpm -qa |grep ^mysql --我这里查找到已经安装了这么多mysql的软件包 mysql-devel-5.1.71-1.el6.x86_64 mysql-test-5.1.71-1.el6.x86_64 mysql-server-5.1.71-1.el6.x86_64 mysql-connector-java-5.1.17-6.el6.noarch mysql-5.1.71-1.el6.x86_64 mysql-libs-5.1.71-1.el6.x86_64 mysql-bench-5.1.71-1.el6.x86_64 mysql-connector-odbc-5.1.5r1144-7.el6.x86_64
下面我需要重装这些软件包,在使用yum remove mysql*时删除的包包括依赖性特别的多,这样很可能会因为删除了其它服务需要使用的rpm包,而造成其它服务或系统其它的功能缺失
解决方法:
方法一:
rpm -e mysql-5.1.71-1.el6.x86_64 --nodeps rpm -e mysql-devel-5.1.71-1.el6.x86_64 --nodeps rpm -e mysql-server-5.1.71-1.el6.x86_64 --nodeps rpm -e mysql-test-5.1.71-1.el6.x86_64 --nodeps rpm -e mysql-connector-java-5.1.17-6.el6.noarch --nodeps rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps rpm -e mysql-bench-5.1.71-1.el6.x86_64 --nodeps rpm -e mysql-connector-odbc-5.1.5r1144-7.el6.x86_64 --nodeps 再重装回来 yum install mysql*
方法二:
rpm -qa |grep ^mysql |xargs rpm -e --nodeps 再重装回来 yum install mysql*
方法三:
直接使用yum remove mysql* 去删除包
再用下面的命令重装回来
# cat /var/log/yum.log |grep "Jun 04" |grep Erased |awk '{print $NF}' |xargs yum install -y
–上面三个方法最好的应该是方法二,操作快速,而且不会像方法三那样去删除了其它的依赖性包(因为你删除其它的依赖性包,就算是再安装回来,那么原来的配置文件被刷新了)
=====================================================================
完全新安装mysql后,确认有mysql这个用户
# id mysql –安装rpm版mysql后,默认就会安装这个用户,它用于默认跑mysql的daemon
uid=27(mysql) gid=27(mysql) groups=27(mysql)
linux下任何服务都需要一个用户来跑(跑守护进程)
# /etc/init.d/mysqld start
–如果/var/lib/mysql/目录为空,那么第一次启动为初始化数据库,第二次以后就不用初始化了
# ls /var/lib/mysql/ –这里就是默认初始化之后产生的文件
ibdata1 ib_logfile0 ib_logfile1 mysql mysql.sock test
# mysql –登录,默认空密码
mysql> show databases; 或者show schemas; –查看有哪些库(默认看到三个库,类似三个目录,里面存放表)
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| test |
+——————–+
3 rows in set (0.00 sec)
mysql> use information_schema; –进入一个库(类似linux cd一个目录)
mysql> select database(); –查看当前在哪个库(类似linux的pwd)
+——————–+
| database() |
+——————–+
| information_schema |
+——————–+
mysql> show tables; –查看当前库有哪些表(类似linux的ls)
mysql> desc CHARACTER_SETS;
mysql> select * from CHARACTER_SETS;
mysql> select * from CHARACTER_SETS\G –把;号换成\G表示当一个表的列太多时,屏幕显示不完全,可以使用\G,把它转换格式显示
mysql> select TABLE_SCHEMA,TABLE_NAME,ENGINE from tables; –只指定查看一个表的其它几列
mysql> select user,host,password from mysql.user; –查看mysql库的user表里的三列(mysql.user类似一个绝对路径的写法)
+——+—————-+———-+
| user | host | password |
+——+—————-+———-+
| root | localhost | |
| root | li.cluster.com | |
| root | 127.0.0.1 | |
| | localhost | |
| | li.cluster.com | |
+——+—————-+———-+
mysql> select user(); –查看当前的登录用户
+—————-+
| user() |
+—————-+
| root@localhost |
+—————-+
mysql> quit –退出mysql的命令行
# netstat -ntlup |grep :3306 –rpm版mysql默认监听3306端口
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3720/mysqld
# ls /var/lib/mysql/ –rpm数据文件
ibdata1 –innodb引擎数据文件,information_schema一些信息在此
ib_logfile1
ib_logfile0 –innodb相关日志组
mysql.sock –用于本地连接;是unix沿用下来的一种连接机制。远程连接用tcp/ip,本地也可以用tcp/ip。socket连接速度相对快一点,tcp/ip相对稳定点
mysql –对应mysql库
test –对应test库
# rm /var/lib/mysql/mysql.sock
rm: remove socket `/var/lib/mysql/mysql.sock’? y
# mysql –连接报错,找不到socket文件
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
[root@li ~]# mysql -h 127.0.0.1 –但是通过tcp/ip连接
–解决方法,重启mysqld(不能从别人机器拷过来,因为socket与本系统相关,是拷不到其它系统上去的)
–socket和tcp/ip连接的区别:
socket是unix的一种连接机制,用于本地程序连接
tcp/ip用于远程程序连接,也可以用于本地连接(当使用IP为本地IP时)
如果是本地连接.socket效果要好,从优化角度讲,本地最好用socket
————————————————————–
修改密码三种方法:
第一种:
[root@li ~]# mysqladmin -u root password “123” –把root用户登录密码改为123
[root@li ~]# mysql
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
[root@li ~]# mysql -p123 –参数与密码之间没有空格
[root@li ~]# mysql -p –不想明文登录就使用这种方式
Enter password:
# mysqladmin -u root password ‘456’ -p123 –有密码后,再使用这个命令改密码,就需要原密码
第二种:
mysql> update mysql.user set password=password(“789″) where user=”root” and host=”localhost”; –使用sql语句在数据库内部直接修改用户密码表,password()是一个密码加密函数
mysql> flush privileges; –修改过密码后都要记得刷新权限表
第三种:
mysql> set password for ‘root’@’localhost’=password(‘123’); –使用此操作语句也可以修改密码,修改后不需要刷新权限表
mysql> select user,host,password from mysql.user;
+——+—————-+——————————————-+
| user | host | password |
+——+—————-+——————————————-+
| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| root | li.cluster.com | |
| root | 127.0.0.1 | |
| | localhost | |
| | li.cluster.com | |
+——+—————-+——————————————-+
–另外四个用户不安全,所以下面把它们都删除掉
mysql> delete from mysql.user where host=”li.cluster.com” or host=”127.0.0.1″;
mysql> delete from mysql.user where user=””;
mysql> select user,host,password from mysql.user;
+——+———–+——————+
| user | host | password |
+——+———–+——————+
| root | localhost | 773359240eb9a1d9 |
+——+———–+——————+
mysql> flush privileges;
–或者直接用这一条去删
mysql> delete from mysql.user where password=””;
mysql> flush privileges;
–把test库(是个空库,用于测试用的)也删除掉
mysql> drop database test; 或者drop schema test;
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
+——————–+
===============================================================
mysql> show variables; –查看mysql的当前参数和对应的值
mysql> show status; –查看mysql运行的各个状态参数
–修改参数例子
mysql> show variables like “%connections”; –模糊查询
+———————-+——-+
| Variable_name | Value |
+———————-+——-+
| max_connections | 151 |
| max_user_connections | 0 |
mysql> show processlist; –查看当前有哪些连接
+—-+——+———–+——+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——+———–+——+———+——+——-+——————+
| 30 | root | localhost | NULL | Sleep | 58 | | NULL |
| 38 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+—-+——+———–+——+———+——+——-+——————+
mysql> set global max_connections=200; –把最大允许的链接数改为150
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like “%connections”;
+———————-+——-+
| Variable_name | Value |
+———————-+——-+
| max_connections | 200 | –再次查看变成200
| max_user_connections | 0 |
–但注意上面的修改重启又回变回到151
mysql的配置文件,rpm 版默认为/etc/my.cnf
[mysqld] –用中括号括起来的叫参数组,用来针对不同的工具设定参数
datadir=/var/lib/mysql –数据文件存放的目录
socket=/var/lib/mysql/mysql.sock –socket文件是用于本地连接mysql数据库的接口文件,远程连接的话就要通过TCP/IP协议
user=mysql –管理mysql的系统用户
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_connections=200 –加到这里,重启后,这个值就不会变回151了
[mysqld_safe]
log-error=/var/log/mysqld.log –错误日志文件
pid-file=/var/run/mysqld/mysqld.pid –pid文件
–注意,pid文件和socket文件是服务启动成功后才会有的
例:理解参数组
在/etc/my.cnf 后面加上一段
[client] –针对客户端登录时的参数组
password=123 –客户端登录时直接使用123这个密码了
mysql –再次登录就不需要密码了
–直接使用mysqld_safe来启动mysql数据库
[root@li ~]# /usr/bin/mysqld_safe –defaults-file=/etc/my.cnf &
停掉这个数据库可以
# /usr/bin/mysqladmin shutdown -p123
# /usr/bin/mysqld_safe –datadir=/var/lib/mysql –socket=/var/lib/mysql/mysql.sock –pid-file=/var/run/mysqld/mysqld.pid –basedir=/usr –user=mysql &
停也可以直接 kill -TERM `cat /var/run/mysqld/mysqld.pid`
———————————————————————-
忘记密码如何修改
1,可以在配置文件里加上
skip-grant-tables –注意写到[mysqld]参数组下,表示跳过授权
2,/etc/init.d/mysqld restart
mysql –登录就不需要密码,进去改密码,改完后,直接flush privileges就可以使用新密码来登录了
3,改完后记得去掉skip-grant-tables重新reload
4,再使用新的密码登录
———————————————————————–
源码版
三种版本的比较:
rpm 安装方便,功能已经定制好。对于特别大量的环境做批量安装比较方便。
二进制 安装比较方便,功能也是已经定制好,但有所选择。其实就是省去编译步骤的源码版。
源码版 安装过程比较麻烦,要求技术水平高,但能自己去定制需要的功能,生产环境下有功能需求的话尽量使用这种版本
尝试安装mysql-5.6.25的源码版
下载路径为:
http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.25.tar.gz/from/http://mysql.mirror.rafal.ca/
MySQL5.5版本之后,编译的选项同样众多,DBA可以通过# cmake . -LH
查看支持的参数,或者浏览下列页面:http://dev.mysql.com/doc/refman/5.6/en/source-
configuration-options.html,查看编译时可指定参数的详细描述。
一些常用参数如下:
* CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
* DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
* DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
* ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
* WITH_COMMENT:指定编译备注信息
* WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
* WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
* SYSCONFDIR:初始化参数文件目录
* MYSQL_DATADIR:数据文件目录
* MYSQL_TCP_PORT:服务端口号,默认3306
* MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
先把你的机器上已经被人安装过的源码mysql给删除掉
# rm /usr/local/mysql -rf --删除安装目录(大部分的安装文件,命令,配置文件都放在这) # rm /mysqldata56/ -rf --删除定义的数据目录(此目录是自定义的) # rm /usr/src/mysql-* -rf --删除以前编译过mysql的源码
软件包路径:
下载软件包:mysql-5.6.25.tar.gz
安装前准备:
# yum groupinstall "Development tools" -y # yum groupinstall "Desktop Platform Development" -y # yum install cmake -y --mysql5.5之后的版本需要使用cmake来进行编译 # yum install ncurses-devel -y
安装过程:
# tar xf mysql-5.6.25.tar.gz -C /usr/src/ # cd /usr/src/mysql-5.6.25/ # cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=gbk,gb2312 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 # make # make install
安装后
1,手动编写my.cnf配置文件
# mkdir /usr/local/mysql/etc
# vim /usr/local/mysql/etc/my.cnf
[mysqld]
port=3307
datadir=/mysqldata56
pid-file=/mysqldata56/mysql56.pid
socket=/mysqldata56/mysql56.socket
log-error=/mysqldata56/mysql56-err.log
user=mysql
[client]
socket=/mysqldata56/mysql56.socket
2:创建相关目录,并修改权限
# mkdir /mysqldata56 # chown mysql.mysql /mysqldata56 /usr/local/mysql/ -R
3:初始化数据库
# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/usr/local/mysql/etc/my.cnf --user=mysql --basedir=/usr/local/mysql/
4:启动服务
# /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf &
–这样启动mysql不能实现开机自动启动(解决方法:1,自己写服务脚本 2,写到/etc/rc.local里)
5:登录
# /usr/local/mysql/bin/mysql
登录命令太长:可以做软链接或别名 ,或直接把此命令拷到/bin/下换个名字(因为rpm版也有mysql命令,防止冲突)
如果服务启不来:
排错思路:先细心对比一下过程(参数是否写错),看下是否进程已经存在(已经启动了)。如果还查不出来,可以尝试查看错误日志里的报错,根据报错再来排错
===========================================================
源码版mysql自带了服务脚本,路径在/usr/src/mysql-5.6.25/support-files/mysql.server
(但是这个脚本里默认使用的配置文件是/etc/my.cnf,默认使用的datadir是/usr/local/mysql/data)
这样就很受这个脚本的限制,很多参数无法随心所欲的自定义。
要解决这个问题:
方法一:改它这个服务脚本,对应你自己定义的参数
方法二:自己简单写一个,能实现基本功能就行
扩展自己写一个支持chkconfig的服务启动脚本的基本思路:
# vim /etc/init.d/mysql56 #!/bin/bash # chkconfig: 2345 64 36 start() { /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf & } stop() { kill -15 `cat /mysqldata56/mysql56.pid` } case "$1" in start ) start ;; stop ) stop ;; restart ) stop start ;; * ) echo "只支持(start|stop|restart)" esac
# chmod 755 /etc/init.d/mysql56 # chkconfig --add mysql56 # chkconfig --list |grep mysql56 mysql56 0:off 1:off 2:on 3:on 4:on 5:on 6:off