说明:此博文为,mysql服务器复习笔记。此博文分享在复习过程中,实战遇到的问题,具体的细节和术语准确度别纠结。
@author:拈花为何不一笑
MySQL服务器管理(卸载,安装,运行等)
1.首先删除系统自带的mysql(通常版本比较低)
(1).先查询当前linux系统是否已安装了mysql
使用命令: rpm -qa | grep -i mysql 或者 rpm -q mysql
例如:
[root@jtxdsh-129 ~]# rpm -qa | grep -i mysql
MySQL-python-1.2.3-0.3.c1.1.el6.i686
mysql-server-5.1.47-4.el6.i686
mysql-5.1.47-4.el6.i686
mysql-devel-5.1.47-4.el6.i686
qt-mysql-4.6.2-16.el6.i686
mysql-libs-5.1.47-4.el6.i686
perl-DBD-MySQL-4.013-3.el6.i686
mysql-connector-odbc-5.1.5r1144-7.el6.i686
[root@jtxdsh-129 ~]#
2.卸载已安装的旧版mysql和与之依赖的
使用命令: rpm -ev mysql-server-5.1.47-4.el6.i686 --nodeps 其中--nodeps选项表示忽略依赖卸载
例如:
[root@jtxdsh-129 ~]# rpm -ev MySQL-python-1.2.3-0.3.c1.1.el6.i686 #使用卸载命令
[root@jtxdsh-129 ~]# rpm -qa | grep -i mysql #再查询,发现MySQL-python-1.2.3-0.3.c1.1.el6.i686没有了
mysql-server-5.1.47-4.el6.i686
mysql-5.1.47-4.el6.i686
mysql-devel-5.1.47-4.el6.i686
qt-mysql-4.6.2-16.el6.i686
mysql-libs-5.1.47-4.el6.i686
perl-DBD-MySQL-4.013-3.el6.i686
mysql-connector-odbc-5.1.5r1144-7.el6.i686
[root@jtxdsh-129 ~]#
按照上面步骤把查询出来与mysql相关的程序全部卸载掉(
大家注意到没,本人是先卸载依赖再删除mysql本身的卸载顺序,当然咯这里使用了--nodeps已经忽略了依赖)
mysql-connector-odbc-5.1.5r1144-7.el6.i686
[root@jtxdsh-129 ~]# rpm -ev qt-mysql-4.6.2-16.el6.i686 --nodeps
[root@jtxdsh-129 ~]# rpm -ev perl-DBD-MySQL-4.013-3.el6.i686 --nodeps
[root@jtxdsh-129 ~]# rpm -ev mysql-connector-odbc-5.1.5r1144-7.el6.i686 --nodeps
[root@jtxdsh-129 ~]# rpm -ev mysql-server-5.1.47-4.el6.i686 --nodeps
[root@jtxdsh-129 ~]# rpm -ev mysql-5.1.47-4.el6.i686 --nodeps
[root@jtxdsh-129 ~]# rpm -ev mysql-devel-5.1.47-4.el6.i686 --nodeps
[root@jtxdsh-129 ~]# rpm -ev mysql-libs-5.1.47-4.el6.i686 --nodeps
[root@jtxdsh-129 ~]# rpm -qa | grep -i mysql #卸载完后,再查询没有了,说明卸载成功
[root@jtxdsh-129 ~]#
[root@jtxdsh-129 ~]# whereis mysql
mysql:
[root@jtxdsh-129 ~]# which mysql
/usr/bin/which: no mysql in (/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
[root@jtxdsh-129 /]# find / -name mysql
[root@jtxdsh-129 /]#
3.安装指定版本的Mysql,依赖安装,mysql启动和访问
(1)首先要准备安装mysql的环境:比如gcc, gcc-c++, cmake, ncurses-devel, perl
(2)查询上面的工具是否安装过:
[root@jtxdsh-129 ~]# yum list installed | grep gcc.*
compat-libgcc-296.i686 2.96-144.el6 @anaconda-centos-201106051823.i386/6.0
gcc.i686 4.4.4-13.el6 @anaconda-centos-201106051823.i386/6.0
gcc-c++.i686 4.4.4-13.el6 @anaconda-centos-201106051823.i386/6.0
gcc-gfortran.i686 4.4.4-13.el6 @anaconda-centos-201106051823.i386/6.0
libgcc.i686 4.4.4-13.el6 @anaconda-centos-201106051823.i386/6.0
[root@jtxdsh-129 ~]#
同样的方式进行查询:
[root@jtxdsh-129 ~]# yum list installed | grep -i cmake #发现没有输出结果,表示没有安装cmake
[root@jtxdsh-129 ~]# yum list installed | grep -i ncurses-devel #查询出来了ncurses-devel,说明已经安装了
ncurses-devel.i686 5.7-3.20090208.el6
[root@jtxdsh-129 ~]# yum list installed | grep -i perl
mod_perl.i686 2.0.4-10.el6 @anaconda-centos-201106051823.i386/6.0
perl.i686 4:5.10.1-115.el6
(3)yum -y install gcc gcc-c++ ncurses-devel perl #一次把这几个没有安装的程序都安装,哪个安装了的就从这条命令中去掉哪个
发现只有cmake没有安装,那安装cmake
(4)cmake 单独安装,使用源码安装方式
cd /usr/local/src #进入一个目录(目录可以自己指定),用来安装cmake
下载cmake-3.12.0.tar.gz
tar -zvxf cmake-3.12.0.tar.gz #当前目录下,解压cmake-3.12.0.tar.gz包
cd cmake-3.12.0/ #进入解压后的文件目录cmake-3.12.0下
./configure #执行configure文件对安装环境进行检验并在当前目录下生成编译时所需文件(如CMakefile.txt)
#采用gcc4.4.4版本编译时遇到提示译器gcc不支持c++11 , 解决方案:更新至gcc/g++ 4.8版本或以上即可。
./bootstrap #执行bootstrap文件
make #编译, Linux系统环境下的make就是GNU Make(gmake),是为了区别在Solaris系统或其他非GNU/linux系统中的make的编译器而起的名字
make install #安装
[root@jtxdsh-129 cmake-3.12.0]# cmake --version #查看是否成功安装,如果有下面信息说明安装成功了
cmake version 3.12.0
CMake suite maintained and supported by Kitware (kitware.com/cmake).
(5) ===>> 方式一:已编译的mysql压缩包安装
cd /usr/local/src #进入一个目录(目录可以自己指定),用来安装mysql
(5.1)下载,解压
https://dev.mysql.com/downloads/mysql/#downloads #下载地址,这里下载mysql-5.5.61-linux-glibc2.12-i686.tar.gz这个版本
#如果想下载其它版本,请点击右边的Looking for previous GA versions?
下载成功后,mysql-5.5.61-linux-glibc2.12-i686.tar.gz上传到linux系统 /usr/local/src目录下
tar -zxvf mysql-5.5.61-linux-glibc2.12-i686.tar.gz #解压
(5.2)创建mysql所需要的环境
cd /usr/local #进入linux系统默认安装总目录
mkdir mysql #创建mysql目录作为mysql的安装目录
cd /usr/local/src/mysql-5.5.61-linux-glibc2.12-i686/ #进入mysql解压后的目录
[root@jtxdsh-129 mysql-5.5.61-linux-glibc2.12-i686]# cp ./ -r /usr/local/mysql #把当前目录下所有数据拷贝至/usr/local/mysql目录中
cat /etc/passwd | grep mysql #查看mysql用户是否存在linx系统中,如果存在则不需要创建了
cat /etc/groups | grep mysql #查看mysql用户组是否存在linx系统中,如果存在则不需要创建了
###创建这两个东西的目的是为了更好的管理mysql数据库软件###
groupadd mysql #创建用户组
useradd -r -g mysql mysql #创建用户并指定所属用户组
(5.3)安装mysql数据库和属主设置
cd /usr/local/mysql #进入mysql安装目录
chown -R mysql:mysql ./ #设置当mysql安装目录的属主和所属于用户组
./scripts/mysql_install_db --user=mysql #安装mysql数据库
chown -R root:root ./ #修改当前目录归属为root:root
chown -R mysql:mysql data #修改data目录归属为mysql:mysql
(5.4)添加开机启动
[root@jtxdsh-129 mysql]# cp ./support-files/mysql.server /etc/init.d/mysqld #把mysql加入系统启动,拷贝mysql.server并重命名为mysqld
[root@jtxdsh-129 mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld #把mysql加入系统启动,拷贝mysql.server并重命名为mysqld
chkconfig --list #查询出所有的服务(相当于window下的服务管理中的服务),发现并没有mysqld服务
chkconfig mysqld on #把mysqld加入到服务中开机启动mysql服务器。mysql.server执行时其实调用mysqld
[root@jtxdsh-129 ~]# netstat -tupln | grep mysql #重启linux系统,查询发现mysql服务器开机启动成功
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2147/mysqld
[root@jtxdsh-129 ~]#
(5.5)mysql启动,关闭,重闭和设置mysql数据库的root密码(默认为空)
[root@jtxdsh-129 local]# service mysqld start #启动mysql
Starting MySQL..
[root@jtxdsh-129 local]# netstat -tupln | grep -i mysql #查看是否成功启动mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 24003/mysqld
[root@jtxdsh-129 local]# ./mysql/bin/mysql -h localhost -P 3306 -u root -p #登陆mysql服务器
Enter password: #直接回车,新安装的mysql数据的root用户密码默认为空
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.61 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, 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> quit #退出mysql服务器
[root@jtxdsh-129 local]# mysql/bin/mysqladmin -u root password root #设置mysql数据库root用户的密码
[root@jtxdsh-129 local]# ./mysql/bin/mysql -h localhost -P 3306 -u root -p
Enter password: #不输入密码回车,报错了。
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@jtxdsh-129 local]# ./mysql/bin/mysql -h localhost -P 3306 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.61 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, 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; #使用mysql数据中提供的命令,操作mysql中的数据库...
-----------------------------------------------------
service mysqld start #启动mysql
service mysqld restart #重启mysql
service mysqld stop #启动mysql
-----------------------------------------------------
说明:遇到一些问题
[root@jtxdsh-129 mysql]# service mysql start
Starting MySQL.Logging to '/usr/local/mysql/data/jtxdsh-129.err'.
cp support-files/mysql.server /etc/init.d/mysqld #添加mysqld 开机时启动
[root@jtxdsh-129 mysql-5.5.61-linux-glibc2.12-i686]# service mysqld start --->问题1
/etc/init.d/mysql: line 244: my_print_defaults: command not found
/etc/init.d/mysql: line 264: cd: /usr/local/mysql: No such file or directory
Starting MySQLCouldn't find MySQL server (/usr/local/mysql/[失败]sqld_safe)
[root@jtxdsh-129 mysql-5.5.61-linux-glibc2.12-i686]# cd /usr/local
上面提示非常清楚的告诉了你,在执行mysql.server时需要在目录 /usr/local/mysql中进行相关操作
cd /usr/local && ls #发现并没有/usr/local/mysql这个目录(linux中/usr/local目录下默认为软件安装目录)
mkdir mysql #在/usr/local目录下创建目录mysql(这个目录是用来存放安装程序的,将mysql包被解压后的数据拷贝至/usr/local/mysql目录中)
[root@jtxdsh-129 mysql]# cd /usr/local/src/mysql-5.5.61-linux-glibc2.12-i686/ #进入mysql安装目录,
[root@jtxdsh-129 mysql-5.5.61-linux-glibc2.12-i686]# cp ./ -r /usr/local/mysql #并把当前目录下所有数据拷贝至/usr/local/mysql目录中
设置好权限或归属后
[root@jtxdsh-129 mysql]# service mysqld start --->问题2
Starting MySQL.Logging to '/usr/local/mysql/data/jtxdsh-129.err'.
[root@jtxdsh-129 mysql]# cat /usr/local/mysql/data/jtxdsh-129.err #发现磁盘空间不够,Database写失败
...
InnoDB: a new database to be created!
181222 14:19:16 InnoDB: Setting file ./ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait... #发现磁盘空间不够,Database写失败(df -h,删除一些无用的数据即可解决)
181222 14:19:16 InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 5 MB
....
[root@jtxdsh-129 local]# service mysqld start -->成功启动mysql
Starting MySQL.. [确定]
[root@jtxdsh-129 local]# netstat -tupln | grep -i mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 24003/mysqld
[root@jtxdsh-129 local]# mysql -h localhost -P 3306 -u root -p #问题3,重启linux系统后,直接登陆mysql服务器,报错.(应该先开mysql服务即启动mysql服务器)
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
本地不能登陆,而远程可以登陆mysql服务器--->问题4
是因为有一个空用户:''@locahost (''表示用户名,@是一个符号,localhost表示主机host)
远程客户端(这里指windows系统)登陆mysql服务器(linux中安装的mysql服务器),来删除空用户,即可解决此问题。
这个空用户导致本地不能登陆linux,或用户不需要输入密码就直接可以登陆,mysql -h localhost -u root即可登陆,但是数据不一样。
mysql> select user,host,password from mysql.user; (远程windows系统,相对于linux是远程,参照物:安装了mysql的linux系统)
+------+------------+-------------------------------------------+
| user | host | password |
+------+------------+-------------------------------------------+
| root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | jtxdsh-129 | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | jtxdsh-129 | |
+------+------------+-------------------------------------------+
6 rows in set (0.02 sec)
mysql> drop user ''@localhost; #在windows系统下删除空用户
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+------+------------+-------------------------------------------+
| user | host | password |
+------+------------+-------------------------------------------+
| root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | jtxdsh-129 | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | jtxdsh-129 | |
+------+------------+-------------------------------------------+
5 rows in set (0.00 sec)
mysql>
(5.6)设置mysql客户端软链接(设置软链接,使其在任意目录下直接使用mysql的客户端命令mysql -h localhost ...命令登陆,否则会报错找不到mysql command)
(a)未设置软链接前,直接使用mysql命令,报错。(如果想使用得到mysql所在目录下/usr/local/mysql/bin/mysql才能使用,这个跟windows上的原理是一样的)
[root@jtxdsh-129 local]# mysql -h localhost -u root -P3306 -p
-bash: mysql: command not found
===>>>> 设置软链接
[root@jtxdsh-129 local]# ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql #创建mysql客户端/usr/local/mysql/bin/mysql的软链接/usr/local/bin/mysql
(b)设置软链接后,直接使用mysql命令登陆mysql服务器,成功。
[root@jtxdsh-129 local]# mysql -h localhost -u root -P3306 -p
Enter password:
。。。。
[root@jtxdsh-129 local]# ll /usr/local/bin
总用量 62156
-rwxr-xr-x. 1 root root 14498661 12月 22 11:49 ccmake
-rwxr-xr-x. 1 root root 16003711 12月 22 11:49 cmake
-rwxr-xr-x. 1 root root 15701488 12月 22 11:49 cpack
-rwxr-xr-x. 1 root root 17215421 12月 22 11:49 ctest
lrwxrwxrwx. 1 root root 26 12月 22 14:53 mysql -> /usr/local/mysql/bin/mysql
-rwxr-xr-x. 1 root root 2363 10月 24 16:55 pcre-config
-rwxr-xr-x. 1 root root 69899 10月 24 16:55 pcregrep
-rwxr-xr-x. 1 root root 143323 10月 24 16:55 pcretest
[root@jtxdsh-129 local]#
说明:mysql与mysqld的区别
-->>>位于 mysql安装目录/bin/{mysql,mysqld} 的两个命令工具
mysql #就是通常用来登陆的命令,mysql is a command-line client for executing SQL statements interactively or in batch mode.
mysqld #mysqld服务(启动它就启动了mysql),mysqld is the MySQL server.
-->>>位于 mysql安装目录/support-files/mysql.server
mysql.server #用于服务注册和启动服务(启动mysql)
(5.7)开墙mysql对外提供服务(开放mysql监听的端口3306),远程机器可以连接到本机的mysql服务器(网络是可达的,ping 安装mysql的机器的ip看看是否连通)
[root@jtxdsh-129 local]# /sbin/iptables -L -n | grep 3306 #发现没有开墙
[root@jtxdsh-129 local]#
[root@jtxdsh-129 local]# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #添加这句,在-I FORWARD -m....前面添加此句
service iptables restart #重启防火墙服务iptables
[root@jtxdsh-129 local]# mysql -h 192.168.179.129 -P 3306 -u root -p #模拟远程登陆mysql服务器,要求'root'@'jtxdsh-129'
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'jtxdsh-129' (using password: YES)
需要更新mysql用户表中的一个host字段为%,这样才能够远程访问mysql服务器
update user set host = '%' where user = 'root';
commit; #手动提交事务(防止关闭事务,进行修改时不能自动提交)
flush privileges; #刷新下权限(这个不能少,否则还是不能远程登陆)
在本地使用mysql客户端命令mysql远程连接mysql服务器
(安装了mysql服务器的bin目录下都有这个客户端mysql命令,也可以通常客户端工具:比如SQLyog/EMS for MySQL/MySQLQueryBrowser)
比如在本地windows系统中连接远程的mysql服务器
进入本地windows的cmd环境中,Win+r -->输入cmd 回车
C:\Users\Administrator.PCNH>cd d:\mysql\bin #进入本地window中安装的mysql的bin目录下,目的是使用客户端命令mysl来连接远程mysl
C:\Users\Administrator.PCNH>d:
d:\mysql\bin>mysql -h 192.168.179.129 -P 3306 -u root -p #使用mysql命令连接192.168.179.129机器上的mysql服务器
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.5.61 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, 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;
(5.8)mysql配置文件常用属性/参数/选项
mysql安装目录/support-files 目录下存放着mysql的配置文件,如下:
-rw-r--r--. 1 root root 19759 12月 22 13:58 my-innodb-heavy-4G.cnf
-rw-r--r--. 1 root root 4665 12月 22 13:58 my-large.cnf
-rw-r--r--. 1 root root 4676 12月 22 13:58 my-medium.cnf
-rw-r--r--. 1 root root 2840 12月 22 13:58 my-small.cnf
root@jtxdsh-129 support-files]# cat my-small.cnf |less #查看一下配置文件
touch my.cnf #建立一个自定义的配置文件
mysql配置文件中的内容通常分四大类:
client、mysqld、 mysqldump和 mysqlhotcopy
(5)===>> 方式二:源码方式安装mysql( 如果使用的是未编译的mysql软件包,则需要cmake进行编译和安装。)
(5.1)创建Mysql所需要的环境(创建mysql的安装目录,mysql数据库文件存储目录,mysql用户和组)
###创建这两个东西的目的是为了更好的管理mysql数据库软件###
cat /etc/passwd | grep mysql #查看mysql用户是否存在linx系统中,如果存在则不需要创建了
cat /etc/groups | grep mysql #查看mysql用户组是否存在linx系统中,如果存在则不需要创建了
groupadd mysql #创建用户组
useradd -r -g mysql mysql #创建用户并指定所属用户组
### 创建安装mysql时所需要的两个目录,如果不指定则使用默认的目录###
mkdir mysql #创建mysql安装目录
mkdir mysql/data #创建mysql存储数据的目录
(5.2)安装mysql数据库
#进入mysql安装目录
cd /usr/local/src/mysql
#修改当前目录的属主为mysql,用户组为mysql
chown -R mysql:mysql ./ #语法:chown -R 用户名:组名 ./ ,表示把当前目录下的所有资源的归属更改为(或设置成)当前mysql用户和mysql用户组
#安装mysql数据库
./scripts/mysql_install_db --user=mysql --basedir=/home/usr/local/src/mysql --datadir=/home/usr/local/src/mysql/data
#修改当前目录归属为root:root
chown -R root:root ./
#修改data目录归属为mysql:mysql
chown -R mysql:mysql data
(5.3)添加mysql启动服务和启动mysql
cp support-files/mysql.server /etc/init.d/mysql #添加mysql 开机时启动
service mysql start #开启mysql服务,即启动mysql
(5.4)修改mysql的root用户密码(安装成功后,root用户默认密码为空)
[root@jtxdsh-129 local]# mysql/bin/mysqladmin -u root password root #进入mysql安装目录的bin目录下,设置mysql数据库root用户的密码
(5.5 )设置Mysql配置文件常用选项或属性
mysql安装目录/support-files 目录下存放着mysql的配置文件,如下:
-rw-r--r--. 1 root root 19759 12月 22 13:58 my-innodb-heavy-4G.cnf
-rw-r--r--. 1 root root 4665 12月 22 13:58 my-large.cnf
-rw-r--r--. 1 root root 4676 12月 22 13:58 my-medium.cnf
-rw-r--r--. 1 root root 2840 12月 22 13:58 my-small.cnf
root@jtxdsh-129 support-files]# cat my-small.cnf |less #查看一下配置文件
touch my.cnf #建立一个自定义的配置文件
Mysql服务器基本使用,希望能够帮助到大家。