-- mysql 数据库 存放,组织,查找,分析,管理数据的一个软件 oracle sqlserver mssql access db2 nosql postgresql sybase mongodb mairadb mysql分支 ...... 数据记录: 石头,动物外壳... 竹简 纸 电子文档 数据库 优势:可以SQL语句快速的进行操作,对大量的数据操作速度比纸和电子文档快N倍,数据库可以进行编程和业务程序结合起来;数据库可以各地进行联网,数据同步等等...... 关系型和对象型数据库 人 表状 姓名 性别 年龄 部门 职位 入职时间 工资 张三 男 30 IT 经理 2005 20000 李四 女 35 sale 经理 2006 30000 LDAP (light weight directory access protocol,轻量级目录访问协议) x.501 NIS 树状 公司 IT 管理 销售 张三 李四 ODBC open database connector 微软提出的 JDBC java database connector sun提出的 mysql 性能 它把最大的精力用于提高性能 可编程支持性 oracle PL/SQL sqlserver T-SQL postgresql pl/PGSQL 可靠性 web2.0标准网站 易用性 简单易用 三种mysql包 rpm 版 二进制 源码版 ------------------------------------------- --rhel版本自带两个数据库,分别为mysql和postgresql rpm版mysql的安装 yum install mysql* # rpm -qa |grep ^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-bench-5.1.71-1.el6.x86_64 mysql-libs-5.1.71-1.el6.x86_64 mysql-connector-odbc-5.1.5r1144-7.el6.x86_64 # id mysql --安装rpm版mysql后,默认就会安装这个用户,它用于默认跑mysql的daemon uid=27(mysql) gid=27(mysql) groups=27(mysql) rm /var/lib/mysql/* -rf --如果此目录不为空,表示使用过mysql,我们这里重新开始,所以清空它 # /etc/init.d/mysqld restart --如果/var/lib/mysql/目录为空,那么第一次启动为初始化数据库,第二次以后就不用初始化了 # mysql mysql> show databases; 或者show schemas; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) mysql> use information_schema; mysql> select database(); +--------------------+ | database() | +--------------------+ | information_schema | +--------------------+ mysql> show tables; mysql> desc CHARACTER_SETS; mysql> select * from CHARACTER_SETS; mysql> select * from CHARACTER_SETS\G --把;号换成\G表示当一个表的列太多时,屏幕显示不完全,可以使用\G,把它转换格式显示 mysql> select user,host,password from 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 | +----------------+ # netstat -ntlup |grep :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("456") 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 | 773359240eb9a1d9 | | 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文件是服务启动成功后才会有的 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 例:理解参数组 在/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,再使用新的密码登录 关闭mysql的方法: # pkill mysql --实际环境不建议用 # /etc/init.d/mysqld stop # mysqladmin shutdown -p123 ----------------------------------------------------------------------- 源码版 三种版本的比较: 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_soft/mysql-5.6.25.tar.gz 安装前准备: # rm /usr/local/mysql -rf # rm /usr/src/mysql-5.6.X/ -rf --确认把以前别人在你机器上做过的删除 # yum install cmake -y --新的编译工具cmake # yum install ncurses-devel 安装过程: # 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配置文件 [root@li /]# mkdir /usr/local/mysql/etc [root@li /]# 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:创建相关目录,并修改权限 [root@li /]# mkdir /mysqldata56 [root@li /]# 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 & 5:登录 # /usr/local/mysql/bin/mysql 登录命令太长:可以做软链接 或 别名 ,或直接把此命令拷到/bin/下换个名字(因为rpm版也有mysql命令,防止冲突) 如果启不来 排错思路:先细心对比一下过程(参数是否写错)。查不出来,查错误日志里的报错,根据报错再来排错