mysql数据库学习(一)--基础

时间:2023-12-10 18:10:20

一、简介

MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

  • MySQL是一种数据库管理系统。
  • MySQL是一种关联数据库管理系统。
  • MySQL软件是一种开放源码软件。
  • MySQL数据库服务器具有快速、可靠和易于使用的特点。
  • MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。
  • 有大量可用的共享MySQL软件。

MySQL表最大能达到多少?

InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。

二、安装数据库

下载MySQL地址:http://dev.mysql.com/downloads/mysql/

1.安装操作

1.yum安装,这个比较简单,可以将需要的包都给直接安装好---推荐使用

yum install mysql-server

2.ubuntu安装,一般生产环境使用比较少

1. sudo apt-get install mysql-server
2. sudo apt-get isntall mysql-client
3. sudo apt-get install libmysqlclient-dev # 检测是否安装成功(是否为LISTEN状态)
sudo netstat -tap | grep mysql

3.编译安装,较为复杂,依赖较多

# 安装依赖包
yum install ncurses-devel gcc gcc-c++ -y # 创建目录
mkdir -p /home/oldsuo/tools # 安装cmake软件,gmake编译安装
cd /home/oldsuo/tools/
tar xf cmake-2.8.8.tar.gz
cd cmake-2.8.8
./configure
#CMake has bootstrapped. Now run gmake.
gmake
gmake install
cd ../ # 开始安装mysql
# 创建用户和组
groupadd mysql
useradd mysql -s /sbin/nologin -M -g mysql # 解压编译MySQL
tar zxf mysql-5.5.32.tar.gz
cd mysql-5.5.32
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
-DMYSQL_DATADIR=/application/mysql-5.5.32/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0 #-- Build files have been written to: /home/oldsuo/tools/mysql-5.5.32
提示: 编译时可配置的选项很多,具体可参考结尾附录或官方文档: make
#[100%] Built target my_safe_process
make install
ln -s /application/mysql-5.5.32/ /application/mysql
如果上述操作未出现错误,则MySQL5.5.32软件cmake方式的安装就算成功了。 #拷贝配置文件
cp mysql-5.5.32/support-files/my-small.cnf /etc/my.cnf #添加变量,并使之生效
echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
source /etc/profile
echo $PATH #授权用户及/tmp/临时文件目录
chown -R mysql.mysql /application/mysql/data/
chmod -R 1777 /tmp/ #初始化数据库
cd /application/mysql/scripts/
./mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql
cd ../ #启动数据库
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start #检查端口
netstat -lntup|grep 3306

2.安装后操作

1、删除不必要的用户和库:

#查看用户和主机列,从mysql.user里查看
select user,host from mysql.user; #删除用户名为空的库,并检查
delete from mysql.user where user='';
select user,host from mysql.user; #删除主机名为localhost.localdomain的库,并检查
delete from mysql.user where host='localhost.localdomain';
select user,host from mysql.user; #删除主机名为::1的库,并检查。::1库的作用为IPV6
delete from mysql.user where host='::1'; #删除test库
drop database test;

2、添加额外管理员:

# 添加额外管理员,system作为管理员,123456为密码
mysql> delete from mysql.user;
Query OK, 2 rows affected (0.00 sec)
mysql> grant all privileges on *.* to system@'localhost' identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)
# 刷新MySQL的系统权限相关表,使配置生效
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user;
+--------+-----------+
| user | host |
+--------+-----------+
| system | localhost |
+--------+-----------+
1 row in set (0.00 sec)
mysql>

3、设置登录密码并开机自启:

#设置密码,并登陆
/usr/local/mysql/bin/mysqladmin -u root password 'oldsuo'
mysql -usystem -p #开机启动mysqld,并检查
chkconfig mysqld on
chkconfig --list mysqld

三、字符集

1.字符集简介

字符集,character set,就是一套表示字符的符号和这些的符号的底层编码;而校验规则,则是在字符集内用于比较字符的一套规则。简单的说,字符集就是一套文字符号及其编码、比较规则的集合,第一个计算机字符集ASC2,MySQL数据库字符集包括字符集和校对规则两个概念,字符集是定义数据库里面的内容字符串的存储方式,而校对规则是定义比较字符串的方式。

建议:中英文环境选择utf8

2、查看设置字符集

# 查看MySQL字符集设置情况
show variables like 'character_set%';
# 查看库的字符集
show create database db;
# 查看表的字符集
show create table db_tb\G
# 查询所有
show collation; # 设置表的字符集
set tables utf8;

3、MySQL数据乱码及解决方法

1>    系统方面
cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8" 2> 客户端(程序),调整字符集为latin1。
mysql> set names latin1; #临时生效
Query OK, 0 rows affected (0.00 sec)
#更改my.cnf客户端模块的参数,实现set name latin1 的效果,并且永久生效。
[client]
default-character-set=latin1
#无需重启服务,退出登录就生效,相当于set name latin1。 3> 服务端,更改my.cnf参数
[mysqld]
default-character-set=latin1 #适合5.1及以前版本
character-set-server=latin1 #适合5.5 4> 库、表、程序
#建表指定utf8字符集
mysql> create database nick_defailtsss DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

4、将utf8字符集修改成GBK字符集的实际过程

1>    导出表结构
#以utf8格式导出
mysqldump -uroot -p --default-character-set=utf8 -d nick_defailt>alltable.sql
--default-character-set=gbk #表示已GBK字符集连接 –d 只表示表结构 2> 编辑alltable.sql 将utf8改成gbk。 3> 确保数据库不在更新,导出所有数据
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=utf8 nick_defailt>alldata.sql 4> 打开alldata.sql将set name utf8 修改成 set names gbk(或者修改系统的服务端和客户端) 5> 建库
create database oldsuo default charset gbk; 6> 创建表,执行alltable.sql
mysql -uroot -p oldsuo <alltable.sql 7> 导入数据
mysql -uroot -p oldsuo <alltable.sql

四、存储引擎

MySQL最常用存储引擎Myisam和Innodb。mysql 5.5.5以后默认存储引擎为Innodb。

MySQL的每种引擎在MySQL里是通过插件的方式使用的,MySQL可以支持多种存储引擎。

建议:使用 Innodb引擎,因为支持回滚。

1.引擎对应系统文件

1)    MyISAM引擎系统库表对应文件
[root@mysql 3306]# ll /data/3306/data/mysql/
-rw-rw----. 1 mysql mysql 10630 10月 31 16:05 user.frm #保存表的定义
-rw-rw----. 1 mysql mysql 1140 10月 31 18:40 user.MYD #数据文件
-rw-rw----. 1 mysql mysql 2048 10月 31 18:40 user.MYI #索引文件 [root@mysql 3306]# file data/mysql/user.frm
data/mysql/user.frm: MySQL table definition file Version 9
[root@mysql 3306]# file data/mysql/user.MYD
data/mysql/user.MYD: DBase 3 data file (167514107 records)
[root@mysql 3306]# file data/mysql/user.MYI
data/mysql/user.MYI: MySQL MISAM compressed data file Version 1 2) InnoDB引擎 [root@mysql 3306]# ll data/
-rw-rw----. 1 mysql mysql 134217728 10月 31 20:05 ibdata1

2.修改引擎

创建后引擎的修改
语法: ALTER TABLE student ENGINE = INNODB;
ALTER TABLE student ENGINE = MyISAM;

3、建表指定引擎

mysql> create table mess (
-> id int(4) not null,
-> name char(20) not null,
-> age tinyint(2) NOT NULL default '',
-> dept varchar(16) default NULL
-> ) ENGINE=MyISAM CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)

五、基本操作

学习如何管理和导航MySQL数据库和表是要掌握的首要任务之一,下面的内容将主要对MySQL的数据库和表的一些常用命令进行总结,一些我们不得不掌握的命令,一些信手拈来的命令。

1.数据操作

运行相关:

1、    单实例mysql启动
[root@localhost ~]# /etc/init.d/mysqld start
Starting MySQL [确定]
#mysqld_safe –user=mysql & 2、 查看MySQL端口
[root@localhost ~]# ss -lntup|grep 3306
tcp LISTEN 0 50 *:3306 *:* users:(("mysqld",19651,10)) 3、 查看MySQL进程
[root@localhost ~]# ps -ef|grep mysql|grep -v grep
root 19543 1 0 Oct10 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/localhost.localdomain.pid
mysql 19651 19543 0 Oct10 ? 00:05:04 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --log-error=/usr/local/mysql/data/localhost.localdomain.err --pid-file=/usr/local/mysql/data/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306 4、 MySQL启动原理
/etc/init.d/mysqld 是一个shell启动脚本,启动后最终会调用mysqld_safe脚本,最后调用mysqld服务启动mysql。
"$manager" \
--mysqld-safe-compatible \
--user="$user" \
--pid-file="$pid_file" >/dev/null 2>&1 & 5、关闭数据库
[root@localhost ~]# /etc/init.d/mysqld stop
Shutting down MySQL.... [确定] 6、 查看mysql数据库里操作命令历史
cat /root/.mysql_history 7、 强制linux不记录敏感历史命令
HISTCONTROL=ignorespace 8、 mysql设置密码
/usr/local/mysql/bin/mysqladmin -u root password 'oldsuo' 9、 mysql修改密码,与多实例指定sock修改密码
mysqladmin -uroot -passwd password 'oldsuo'
mysqladmin -uroot -passwd password 'oldsuo' -S /data/3306/mysql.sock

操作相关:

1.查看当前版本

select version();

2.查看当前用户

select user();

3.显示数据库

show databases;

默认数据库:

  mysql - 用户权限相关数据
  test - 用于用户测试数据
  information_schema - MySQL本身架构相关数据

4.创建数据

# utf-8
CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # gbk
CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

5.使用数据库

use db_name

6.查看当前数据表

show tables;

7.用户管理

创建用户
create user '用户名'@'IP地址' identified by '密码';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
修改密码
set password for '用户名'@'IP地址' = Password('新密码') PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

8.授权管理

show grants for '用户'@'IP地址'                  -- 查看权限
grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权
revoke 权限 on 数据库.表 from '用户'@'IP地址' -- 取消权限
all privileges  除grant外的所有权限
select 仅查权限
select,insert 查和插入权限
...
usage 无访问权限
alter 使用alter table
alter routine 使用alter procedure和drop procedure
create 使用create table
create routine 使用create procedure
create temporary tables 使用create temporary tables
create user 使用create user、drop user、rename user和revoke all privileges
create view 使用create view
delete 使用delete
drop 使用drop table
execute 使用call和存储过程
file 使用select into outfile 和 load data infile
grant option 使用grant 和 revoke
index 使用index
insert 使用insert
lock tables 使用lock table
process 使用show full processlist
select 使用select
show databases 使用show databases
show view 使用show view
update 使用update
reload 使用flush
shutdown 使用mysqladmin shutdown(关闭MySQL)
super 使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆
replication client 服务器位置的访问
replication slave 由复制从属使用 对于权限

关于权限

        对于目标数据库以及内部其他:
数据库名.* 数据库中的所有
数据库名.表 指定数据库中的某张表
数据库名.存储过程 指定数据库中的存储过程
*.* 所有数据库

关于数据库

            用户名@IP地址         用户只能在改IP下才能访问
用户名@192.168.1.% 用户只能在改IP段下才能访问(通配符%表示任意)
用户名@% 用户可以再任意IP下访问(默认IP地址为%)

关于用户

            grant all privileges on db1.tb1 TO '用户名'@'IP'

            grant select on db1.* TO '用户名'@'IP'

            grant select,insert on *.* TO '用户名'@'IP'

            revoke select on db1.tb1 from '用户名'@'IP'

实例

6.破解Mysql登录密码

1> 普通方式
#> service mysqld stop
#>mysqld_safe --skip-grant-tables &
输入 mysql -uroot -p 回车进入
>use mysql;
> update user set password=PASSWORD("newpass")where user="root";
更改密码为 newpassord
> flush privileges; 更新权限
> quit 退出
service mysqld restart
mysql -uroot -p新密码进入 2> 普通方式的简写
service mysqld stop
mysqld_safe --skip-grant-tables --user=mysql &
mysql
update mysql.user set password=PASSWORD("newpass")where user="root" and host='localhost';
flush privileges;
mysqladmin -uroot -pnewpass shutdown
/etc/init.d/mysqld start
mysql -uroot -pnewpass #登陆 3>多实例方式
killall mysqld
mysqld_safe –defaults-file=/data/3306/my.cnf –skip-grant-table &
mysql –u root –p –S /data/3306/mysql.sock #指定sock登陆
update mysql.user set password=PASSWORD("newpass")where user="root";
flush privileges;
mysqladmin -uroot -pnewpass shutdown
/etc/init.d/mysqld start
mysql -uroot -pnewpass #登陆

参考文章:http://www.cnblogs.com/wupeiqi/articles/5713315.html

参考文章:http://www.cnblogs.com/suoning/p/5742885.html