MySQL安装

Posted

tags:

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

mysql

    性能   它把最大的精力用于提高性能

    可编程支持性   oracle  PL/SQL  sqlserver T-SQL   postgresql  pl/PGSQL

    可靠性  web2.0标准网站

    易用性  简单易用


安装方式:

三种mysql包

rpm  版      二进制        源码版 

-------------------------------------------

rpm版

    yum install mysql* -y

 

mysql.i386                  --mysql客户端和共享库           

mysql-bench.i386         --MySQL 标准描述和数据,压力测试工具       

mysql-connector-odbc.i386 --odbc数据库连接工具             

mysql-devel.i386              --mysql开发库        

mysql-server.i386          --mysql服务端           

mysql-test.i386             --测试


--注意使用rpm -qi 去查询每个包的用处

 

[[email protected] ~]# id mysql

uid=27(mysql) gid=27(mysql) groups=27(mysql)


# /etc/init.d/mysqld restart

 

# mysql   --直接用此命令登录

 

 

mysql> show databases;      --默认有三个库

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql             |

| test              |

 

mysql> use information_schema;      --使用这个库,或者叫进入这个库

 

mysql> show tables;     --查看当前库所拥有的表

 

mysql> desc 表名;       --描述表的结构

 

mysql> select * from 表名;

 

mysql> select * from 表名\G;

 

mysql> select database();   --查看现在use进入了哪个库

+--------------------+

| database()        |

+--------------------+

| information_schema |

+--------------------+

 

 

mysql> select user();   --查看当前登录用户

+----------------+

| user()         |

+----------------+

| [email protected] |      --此用户不是系统的root用户,他们的密码无关

 

 

mysql> select database();   --查看你现在use进了哪个库,类似pwd

 

 

mysql> select user,host,password from mysql.user;

 

 

 

[[email protected] ~]# netstat -ntlup |grep 3306

tcp       0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      3720/mysqld

 

 

 

 

 

[[email protected] ~]# ls /var/lib/mysql/    --rpm数据文件

ibdata1         --innodb引擎数据文件,information_schema一些信息在此

ib_logfile1 

ib_logfile0        

mysql.sock      --用于本地连接;是unix沿用下来的一种连接机制。远程连接用tcp/ip,本地也可以用tcp/ip。socket连接速度相对快一点,tcp/ip相对稳定点

mysql               --对应mysql库

test            --对应test库

 

 

 

[[email protected] mysql]# rm /var/lib/mysql/mysql.sock

rm: remove socket `/var/lib/mysql/mysql.sock‘? y

 

[[email protected] mysql]# mysql --连接报错,找不到socket文件

ERROR 2002 (HY000): Can‘t connect to local MySQLserver through socket ‘/var/lib/mysql/mysql.sock‘ (2)

 

[[email protected] ~]# mysql -p -h 2.2.2.35   --但是通过tcp/ip连接

 

--解决方法,重启mysqld

 

 

--socket和tcp/ip连接的区别:

socket是unix的一种连接机制,用于本地程序连接

tcp/ip用于远程程序连接,也可以用于本地连接(当使用IP为本地IP时)

如果是本地连接.socket效果要好,从优化角度讲,本地最好用socket(可以对其备份)

 

 

 

 

 

修改密码三种方法:

第一种:

[[email protected] ~]# mysqladmin -u root password"123"  --把root用户登录密码改为123

[[email protected] ~]# mysql

ERROR 1045 (28000): Access denied for user‘root‘@‘localhost‘ (using password: NO)

 

[[email protected] ~]# mysql -p123    --参数与密码之间没有空格

   

[[email protected] ~]# mysql -p   --不想明文登录就使用这种方式

Enter password:

 

 

 

第二种:

mysql> update mysql.user setpassword=password("456") where user="root" andhost="localhost";   --使用sql语句在数据库内部直接修改用户密码表,password()是一个密码加密函数

mysql> flush privileges;    --修改过密码后都要记得刷新权限表

 

 

第三种:

mysql> set password for‘root‘@‘localhost‘=password(‘123‘); --使用此操作语句也可以修改密码,修改后不需要刷新权限表

 

 

 

--一个普通用户,可以不要密码用下面的方式来登录

[[email protected] ~]$ mysql -u sdfsadfsadfas

[[email protected] ~]$ mysql -u ttt -h 10.1.1.35

 

 

 

 

mysql> select user,host,password from mysql.user;

+------+----------------+------------------+

| user | host          | password         |

+------+----------------+------------------+

| root | localhost     | 773359240eb9a1d9 |

| root | li.cluster.com |                  |

| root | 127.0.0.1     |                  |

|      |localhost      |                  |

|      |li.cluster.com |                  |

+------+----------------+------------------+

--另外四个用户不安全,所以下面把它们都删除掉

 

 

 

 

mysql> delete from mysql.user wherehost="li.cluster.com" or host="127.0.0.1";

mysql> delete from mysql.user whereuser="";

 

 

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;

 

 

 

 

--------------

 

 

mysql> show variables;  --查看mysql的当前参数和对应的值

mysql> show status; --查看mysql运行的各个状态参数

 

 

--修改参数例子

mysql> show variables like  "%connections";

+----------------------+-------+

| Variable_name       | Value |

+----------------------+-------+

| max_connections     | 100   |

| max_user_connections | 0     |

 

 

mysql> set global max_connections=150;  --把最大允许的链接数改为150

Query OK, 0 rows affected (0.00 sec)

 

mysql> show variables like  "%connections";

+----------------------+-------+

| Variable_name       | Value |

+----------------------+-------+

| max_connections     | 150   |    --再次查看变成150

| max_user_connections | 0     |

 

 

--但注意上面的修改重启又回变回到100

 

 

 

 

mysql的配置文件,rpm 版默认为/etc/my.cnf

 

[mysqld]    --用中括号括起来的叫参数组,用来针对不同的工具设定参数

datadir=/var/lib/mysql  --数据文件存放的目录

socket=/var/lib/mysql/mysql.sock    --socket文件是用于本地连接mysql数据库的接口文件,远程连接的话就要通过TCP/IP协议

user=mysql  --管理mysql的系统用户

# Default to using old password format forcompatibility with mysql 3.x

# clients (those using the mysqlclient10 compatibilitypackage).

old_passwords=1 --用于兼容3.x版本的密码格式,老密码格式为16位

 

[mysqld_safe]

log-error=/var/log/mysqld.log   --错误日志文件

pid-file=/var/run/mysqld/mysqld.pid --pid文件

 

--注意,pid文件和socket文件是服务启动成功后才会有的

 

 

 

例:把/etc/my.cnf里的old_passwords=1给注释掉

然后重启mysqld /etc/init.d/mysqld restart

 

mysql> set password for‘root‘@‘localhost‘=password(‘123‘);

 

--再次修改密码,就可以看到用的是新的密码格式了

mysql> select host,user,password from mysql.user;

+-----------+------+-------------------------------------------+

| host      | user | password                                  |

+-----------+------+-------------------------------------------+

| localhost | root |*23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |

+-----------+------+-------------------------------------------+

 

 

 

 

例:理解参数组

 

在/etc/my.cnf 后面加上一段

 

[client]        --针对客户端登录时的参数组

password=123        --客户端登录时直接使用123这个密码了

 

 

 

mysql   --再次登录就不需要密码了

 

 

 

--直接使用mysqld_safe来启动mysql数据库

[[email protected] ~]# /usr/bin/mysqld_safe--defaults-file=/etc/my.cnf &

 

 

--换一个datadir

 

[[email protected] ~]# mkdir /test

[[email protected] ~]# mysql_install_db --datadir=/test--user=mysql

 

[[email protected] ~]# ls /test   --初始化后就有权限表了

mysql  test

 

[[email protected] ~]# /usr/bin/mysqld_safe --datadir=/test--socket=/test/mysql.socket --user=mysql &

--指定以新的datadir启动

 

[[email protected] ~]# ls /test

ibdata1     ib_logfile1  mysql.socket

ib_logfile0 mysql        test

 

 

 

-----------------------------------------------------------------

 

 

忘记密码如何修改

 

1,可以在配置文件里加上

skip-grant-tables   --注意写到[mysqld]参数组下,表示跳过授权

 

 

2,/etc/init.d/mysqld  restart

 

mysql    --登录就不需要密码,进去改密码

 

3,改完后记得去掉skip-grant-tables重新reload

 

 

4,再使用新的密码登录

 

 

 

关闭mysql的方法:

# pkill mysql   --实际环境不建议用

# /etc/init.d/mysqld stop

# mysqladmin shutdown -p123

 

 

 

===================================

 

 

 

二进制版

 

就是指已经编译OK的版本,和rpm版一样功能已经定制好了,如果要使用新功能就需要用源码版重新编译

 

 

 

 

 

shell> groupadd mysql

 

shell> useradd -g mysql mysql

 

shell> cd /usr/local

 

shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz| tar xvf -

 

shell> ln -s full-path-to-mysql-VERSION-OS mysql

 

shell> cd mysql

 

shell> scripts/mysql_install_db --user=mysql

 

shell> chown -R root  .

 

shell> chown -R mysql data

 

shell> chgrp -R mysql .

 

shell> bin/mysqld_safe --user=mysql &

 

 

 

=======================================================

                                 

源码版

 

三种版本的比较:

 

rpm   安装方便,功能已经定制好。对于特别大量的环境做批量安装比较方便。

二进制 安装比较方便,功能也是已经定制好,但有所选择。其实就是省去编译步骤的源码版

源码版 安装过程比较麻烦,要求技术水平高,但能自己去定制需要的功能,生产环境下有功能需求的话尽量使用这种版本

 

 

# tar xf/share/soft/lamp/mysql_source/mysql-5.1.36.tar.gz -C /usr/src/

# cd /usr/src/mysql-5.1.36/

 

 

编译参数简单介绍

 

./configure --help > /root/Desktop/mysqlconfigure.help

 

        --prefix  安装软件的家目录

        --enable-local-infile允许外部表格数据导入到数据库

        --with-charset  字符集  mysql大概支持30多种字符集

        --with-collation  字符的校验规则,mysql大概支持80多种

        --with-extra-charsets扩展字符集

        --with-server-suffix数据库头名,  -max mysql发布有新特性,还没有通过正式的测试,主要用来提升用户的认识

        --with-pthread线程库

        --with-unix-socket-path socket接口路径

        --with-tcp-port 端口

        --with-mysqld-user  运行mysql的系统用户

        --with-libwrap  支持tcp_trapper

        --without-debug 关闭debug信息,mysql数据库会产生一些debug调试信息,对性能有一定的影响,如果不需要这种信息,可以用此参数关闭

        --with-mysqld-ldflags 

        --with-client-ldflags 静态编译可以把性能提高5%到10%

        --with-low-memory  支持低内存,避免内存限制

        --with-mysqlmanager多启动的管理器

        --with-big-tables   支持大表

 

    定义存储引擎的支持的相关参数:

        --with-example-storage-engine

         --with-archive-storage-engine

        --with-csv-storage-engine

        --with-blackhole-storage-engine

        --with-ndbcluster

        --with-federated-storage-engine

 

--在5.1之后,存储引擎做成插件式存储引擎,使用--with-plugins参数来指定编译进去的存储引擎

 

 

 

 

--这是5.0.33的供参考

[[email protected] mysql-5.0.33]# ./configure--prefix=/usr/local/mysql --enable-local-infile --with-charset=gbk--with-extra-charsets=gb2312,utf8 --with-pthread --with-libwrap--with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static--with-low-memory --with-mysqlmanager --with-big-tables--with-example-storage-engine --with-archive-storage-engine--with-csv-storage-engine --with-blackhole-storage-engine  --with-ndbcluster --with-federated-storage-engine

 

 

 

 

编译前准备:

1,开发工具和开发库这两个组要安装

yum groupinstall "开发工具" "开发库"  (在rhel6下就是把开发相关的组都装上)

 

 

2,df -h 查看一下空间是否够

 

 

3,cat /proc/cpuinfo 查看CPU信息,单核相对于多核来说,编译速度要慢一些

 

 

 

 

[[email protected] mysql-5.1.36]# ./configure--prefix=/usr/local/mysql --enable-assembler --enable-profiling --enable-local-infile--with-charset=gbk --with-extra-charsets=utf8,gb2312 --with-pthread  --with-mysqld-ldflags=-all-static--with-client-ldflags=-all-static --with-low-memory --with-big-tables--with-plugins=myisam,innobase,ndbcluster --with-mysqlmanager

 

 

#make ;make install

 

 

 

# ls /usr/local/mysql/  --编译完成后这个目录就有了

bin   etc      lib     mysql-test  sql-bench

docs include  libexec  share

 

 

 

 

第一步:手动编写配置文件

 

[[email protected] /]# mkdir /usr/local/mysql/etc --建立一个存放配置文件的目录

 

 

[[email protected] /]# vim /usr/local/mysql/etc/my.cnf    --编写my.cnf

 

[mysqld]

port=3307       --端口不要和rpm版的3306冲突,这里使用3307

datadir=/data       --数据文件存放目录

socket=/var/run/mysqld/mysql5.socket    --这里的mysql5是自定义的

pid-file=/var/run/mysqld/mysql5.pid

log=/var/log/mysqld/mysql5.log

log-err=/var/log/mysqld/mysql5-err.log

 

 

 

--这两个日志参数都有点问题(因为5.0与5.1的版本兼容的问题),但不影响启动。在明天讲日志文件时来进行修改

 

第二步:建立配置文件里所写的相关目录,并修改相应的权限

[[email protected] /]# mkdir /data   /var/run/mysqld/  /var/log/mysqld

 

[[email protected] /]# chown mysql.mysql /data  /var/log/mysqld /var/run/mysqld/ /usr/local/mysql/  -R

 

 

第三步:配置服务脚本

[[email protected] /]# cp/usr/src/mysql-5.1.36/support-files/mysql.server.sh  /etc/init.d/mysql5 --拷贝服务脚本模版到正确的位置

 

[[email protected] /]# vim /etc/init.d/mysql5  --修改使之指向新编写的配置文件

conf=/usr/local/mysql/etc/my.cnf    --修改这句

 

[[email protected] /]# chmod 755 /etc/init.d/mysql5  --给服务脚本加执行权限

 

--如果是在rhel6.3下安装,用这个脚本的话,会启不来的,因为这个脚本里类似@[email protected]这样的变量,在rhel6.3下不认;所以要么就自己写个脚本,要么就用mysqld_safe来启

 

 

 

 

第四步:初始化数据库,第一次都需要初始化

[[email protected] /]# /usr/local/mysql/bin/mysql_install_db--datadir=/data/ --user=mysql

 

 

第五步:启动服务,并登录

/etc/init.d/mysql5 start

 

 

--如果不拷服务脚本,则使用

/usr/local/mysql/bin/mysqld_safe--defaults-file=/usr/local/mysql/et/my.cnf &

 

 

# /usr/local/mysql/bin/mysql

ERROR 2002 (HY000): Can‘t connect to local MySQLserver through socket ‘/tmp/mysql.sock‘ (111)

--上面找不到socket文件,因为我编译时没有把下面这个参数指定,所以默认找/tmp/mysql.sock

--with-unix-socket-path

 

 

[[email protected] /]# /usr/local/mysql/bin/mysql--socket=/var/run/mysqld/mysql5.socket  

--现在登录需要指定socket文件的位置,要想不指定,可以按下面方法做

 

 

登录时不指定socket的方法:

在配置文件/usr/local/mysql/etc/my.cnf下加上如下一段

[client]

socket=/var/run/mysqld/mysql5.socket

 

 

[[email protected] /]# /usr/local/mysql/bin/mysql   --再次登录就不需要指定socket文件了

 

 

--为了登录方便(输入/usr/local/mysql/bin/mysql太长),可以用下面的方法来做,然后使用mysql5这个命令来登录

# cp /usr/local/mysql/bin/mysql /bin/mysql5

 

-----------------------------------------------------

 

关于mysql数据库启动问题的排错:

熟悉上面五步,一般是权限问题,参数是否写错,空间是否满

 

 

重新初始化数据库;如果还不能启动,查看一下进程,是否有进程卡死

 

 

使用下面命令去查看配置文件写否有误;如果没有报错,则表示OK,并会把数据库的所有参数和对应的值给打印出来

/usr/local/mysql/libexec/mysqld --verbo --help

 

 

--如果希望看到它自带的man文档,做类似下面的操作,把它们拷到对应的路径下就可以使用man去查看了

# cp /usr/local/mysql/share/man/man1/*/usr/share/man/man1/

 

 

 

 

 

====================================================

 

 

 

尝试安装最新的mysql-5.5.13的源码版

 

 

下载路径为:

http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.13.tar.gz/from/http://mysql.mirror.rafal.ca/

 

 

 

MySQL5.5版本中,编译的选项同样众多,DBA可以通过# cmake . -LH 查看支持的参数,或者浏览下列页面:http://dev.mysql.com/doc/refman/5.5/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

 

软件包路径:

/share/soft/lamp/mysql_source/

 

 

# tar xf cmake-2.8.4.tar.gz -C /usr/src/

# cd /usr/src/cmake-2.8.4/

# ./configure ; make ;make install

 

 

--我下面把mysql-5.5.13安装到/usr/local/mysql55这个目录,与mysql5.1.36共存

 

# tar xvf mysql-5.5.13.tar.gz -C /usr/src

# cd /usr/src/mysql-5.5.13/

# cmake . -LAH <--查看编译配置选项

# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55-DDEFAULT_CHARSET=gbk -DDEFAULT_COLLATION=gbk_chinese_ci-DWITH_EXTRA_CHARSETS=utf8,gb2312 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1

 

 

# make ;make install

 

 

--注意:rhel5.7版本自带cmake工具,不过是2.6版本

 

 

--如果在rhel6平台上安装,直接yum install cmake就可以了

 

 

 

 

安装后

1,手动编写my.cnf配置文件

[[email protected] /]# mkdir /usr/local/mysql55/etc

[[email protected] /]# vim /usr/local/mysql55/etc/my.cnf

 

[mysqld]

port=3308

datadir=/data55

pid-file=/var/run/mysqld/mysql55.pid

socket=/var/run/mysqld/mysql55.socket

log=/var/log/mysqld/mysql55.log

log-error=/var/log/mysqld/mysql55-err.log

 

[client]

socket=/var/run/mysqld/mysql55.socket

 

 

第二步:创建相关目录,并修改权限

[[email protected] /]# mkdir /data55 /var/run/mysqld/var/log/mysqld

[[email protected] /]# chown mysql.mysql /data55 /var/run/mysqld/var/log/mysqld /usr/local/mysql55/   -R

 

 

 

 

第三步:初始化数据库

# /usr/local/mysql55/scripts/mysql_install_db--defaults-file=/usr/local/mysql55/etc/my.cnf

--这样不行,会报FATAL ERROR: Could not find./bin/my_print_defaults

 

--用下面的命令来初如化,并且一定要加上--user=mysql参数(因为我前面的my.cnf配置文件里没有写,所以这里要加,否则初始化后的数据权限属主和属组为root)

# cd /usr/local/mysql55/

# ./scripts/mysql_install_db--defaults-file=/usr/local/mysql55/etc/my.cnf --user=mysql

 

 

 

第二种方法就是加上--basedir指定你成/usr/local/mysql55

# /usr/local/mysql55/scripts/mysql_install_db--defaults-file=/usr/local/mysql55/etc/my.cnf --user=mysql --basedir=/usr/local/mysql55/

 

 

--为什么会出现上面的问题?

因为mysql的源码产品都是默认要装到/usr/local/mysql路径的,这就是它们的basedir。现在换了一个路径,那么他就会出现这种找不到的情况,就需要人工去干预。

 

 

 

 

 

第四步:启动服务,看是否登录OK

建议不要用服务脚本来启动,因为默认服务脚本就是在/usr/local/mysql这个目录,如果要改的话,得把服务脚本里相关变量都得改成/usr/local/mysql55才行,这里避免麻烦,就直接用mysqld_safe来启动

 

# /usr/local/mysql55/bin/mysqld_safe--defaults-file=/usr/local/mysql55/etc/my.cnf &

 

 

# /usr/local/mysql55/bin/mysql--socket=/var/run/mysqld/mysql55.socket

 

 

--如果需要服务脚本的支持,则做下列操作

[[email protected] mysql55]# cp /usr/local/mysql55/support-files/mysql.server  /etc/init.d/mysql55

 

 

#vim /etc/init.d/mysql55

conf=/usr/local/mysql55/etc/my.cnf

 

#/etc/init.d/mysql55 start  --启动服务

 

 

=======================================

 

 

用服务脚本启服务容易搞乱,建议大家使用mysqld_safe直接加参数来启

把上面安装的三个mysql启起来

 

启rpm版

/usr/bin/mysqld_safe --defaults-file=/etc/my.cnf &

启5.1.36版

/usr/local/mysql/bin/mysqld_safe--defaults-file=/usr/local/mysql/etc/my.cnf &

启5.5.13版

/usr/local/mysql55/bin/mysqld_safe--defaults-file=/usr/local/mysql55/etc/my.cnf &

 

# netstat -ntlup |grep :33

tcp       0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      29467/mysqld       

tcp       0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      29552/mysqld       

tcp        0      0 :::3308                     :::*                        LISTEN      29682/mysq/usr/local/mysqlld 

 

 

 

然后分别登录到不同版本的数据库进行查找对比

mysql> show engines;  --对比一下两边的引擎

 

mysql> show variables; --查看所有变量

 

mysql> show variables like "have%"; --可以查看支持的引擎的情况,like是模糊查询

 


本文出自 “linux运维” 博客,请务必保留此出处http://bossco.blog.51cto.com/6287622/1739952

以上是关于MySQL安装的主要内容,如果未能解决你的问题,请参考以下文章

从mysql的片段中加载ListView

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

使用 json rereiver php mysql 在片段中填充列表视图

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

PHP代码-psysh调试代码片段工具

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段