欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP学习mysql课件 高级篇_php基础

程序员文章站 2022-05-23 15:41:00
...
MySQL数据库管理 数据库的启动与关闭,安全、访问控制和权限,数据库的备份与恢复,导入和导出记录

数据库管理员的职责
服务器的启动与关闭
用户帐户维护
日志文件维护
数据库的备份与拷贝
服务器的优化
数据库管理系统的软件更新
数据目录的安全性
服务器的安全性
灾难恢复
预防性维护
""""""""""""""""``
数据库的启动与关闭
1、数据库的启动:
方法一:使用service 命令启动MySQL
# service mysqld start
// mysqld是MySQL的守护进程,通过运行它来启动MySQL服务。
方法二:使用mysqld脚本启动MySQL
# /etc/init.d/mysqld start
方法三:使用safe_mysqld实用程序启动MySQL服务,此方法可以使用相关参数
# safe_mysqld&
使用&符号将safe_mysqld放在后台运行。
"""""""""""""""""""``
校验MySQL是否被启动:
# service mysqld status
//返回如下信息,表示已经启动
mysqld (pid 1663) is running...
//1663是mysqld运行的进程号,可能根据不同系统运行的进程数量而不同
若需要重新启动MySQL可以使用如下命令之一:
# service mysqld restart
# /etc/init.d/mysqld restart
""""""""""""""""""``
2、数据库的关闭:
可以使用如下命令之一:
# service mysqld stop
# /etc/init.d/mysqld stop
# /mysqladmin shutdown


MySQL管理
修改root管理密码
方法一:
mysql>set password for ‘帐号'@‘主机' = old_password(‘密码');
update mysql.user set password = old_password(‘密码') where host = ‘主机' and user = ‘帐号';
flush privileges;
方法二:
mysqladmin password 'crq'

用户密码
对于MySQL密码可以使用PASSWORD()和ENCRYPT()函数进行加密
mysql>select PASSWORD(“alex”);
“23fc96e064be0017”
注:ENCRYPT()在Windows上不可用

方法三:使用update语句和password()函数将root口令设置为crp。
mysql> update user set password=password('crq')
-> where user='root';
//返回如下信息,表示授权表user修改成功
Query OK, 2 row affected (0.09 sec)
Rows matched:2 changed:2 warnings: 0
 注意:由此种方法是直接对授权表user进行修改,而服务器只有在启动时才会加载授权表中的权限设置,因此必须要使用客户端程序mysql环境下的flush privileges命令或使用管理工具mysqladmin的flush-privileges子命令通知服务器重新加载授权表。
mysql> flush privileges; //此时即生效可以使用。
""""""""""""""""""""""`
改变数据库存储路径

在Window下,MySQL的所有数据库都保存在“%mysqlroor%\data”目录下。
停止MySQL服务
修改%systemroor%\my.ini文件
[mysqld]
datadir=D:/data
将原目录中的所有文件和文件夹内容,全部移动到新的目录D:/data目录中。
重启MySQL服务

修改MySQL字符集
找到MySQL配置文件my.ini,一般在C:\window\my.ini。
在my.ini文件里面加上“default-character-set=gbk #”或gb2312,utf8
重启MySQL服务

删除匿名用户:
myslq> delete from user where user=' ';
//返回如下信息,表示匿名用户删除成功
Query OK, 2 row affected (0.03 sec)

添加新的用户权限:
使用grant语句用于授予用户权限,
语法:
GRANT priv_type[(column_list)][,priv_type[(column_list)]…]
ON {*.* | * | db_name.* | db_name.tabl_name | db_name}
TO user_name [IDENTIFIED BY ‘password']
[,user_name [IDENTIFIED BY ‘password']…]
[WITH GRANT OPTION]


创建新用户
制定用户名,最长允许为16个英文字符
制定允许该用户可以访问的数据库和表
制定允许该用户对数据库做什么的操作
制定允许该用户从哪些主机/IP进行远程连接
制定允许该用户对其他用户进行授权或取消授权

例如:添加一个可以从本地主机连接到MySQL服务器的超级用户crq,但是连接时必须使用口令crqpass
mysql> grant all on *.* to crq@localhost identfied by 'crqpass' with grant option;
//返回如下信息,表明权限设置成功
Query OK, 0 rows affected (0.02 sec)
例如:使用同样的方法添加一个可以从其他任何地方连接到MySQL服务器的超级用户crq,但是连接时必须使用口令crqpass
mysql> grant all on *.* to crq@'%' identified by ‘crqpass' with grant option;

授予用户特定的权限:
使用grant语句添加一个可以从本地机连接的MySQL服务器的用户user1,并且只授予其针对sales数据库中employee表的select和insert权限。
mysql> grant select,insert on sales.employee to user1@localhost identified by ‘user1pass';
说明:使用:# mysql –u user1 –puser1pass 登录数据库以后可以做如下操作:
mysql> use sales; //打开sales数据库
mysql> show tables; //只能看到employee表
mysql> select * from employee; //可进行查看操作
mysql> insert into employee ……. //可进行插入操作。

撤销用户权限:
语法:REVOKE priv_type[(column_list)][,priv_type[(column_list)]…]
ON {*.* | * | db_name.* | db_name.tbl_name | db_name}
FROM user_name [,user_name…]
例如:撤消用户user1针对sales数据库中employee表的insert权限:
mysql> revoke insert on sales.employee from user1@localhost;
//返回如下信息,表明权限撤销成功。
Query OK, 0 row in set affected (0.00 sec)
""""""""""""""""""""""""""""""`
权限更改何时生效
当mysqld启动时,所有的授权表内容被读进存储器并且从那点生效。
用GRANT、REVOKE或SET PASSWORD对授权表施行的修改会立即被服务器注意到。
如果你手工地修改授权表(使用INSERT、UPDATE等等),你应该执行一个FLUSH PRIVILEGES语句或运行mysqladmin flush-privileges告诉服务器再装载授权表,否则你的改变将不生效,除非你重启服务器。

权限更改的影响
当服务器注意到授权表被改变了时,现存的客户连接有如下影响:
表和列权限在客户的下一次请求时生效。
数据库权限改变在下一个USE db_name命令生效。
全局权限的改变和口令改变在下一次客户连接时生效。

数据库的备份与恢复
1、数据库的备份:
A、用mysqldump备份数据库:
语法: mysqldump [OPTIONS] database [table]
实例:
将数据库sales备份成sales_bak030630.sql文件。
# mysqldump –u root –p --opt sales > sales_bak030630.sql
//返回如下信息,表明备份成功
-rw-r--r-- 1 root root 2296 Jun 29 23:30 sales_bak030630.sql

B、用直接拷贝的方法备份数据库:
不用mysqldump 来备份数据库或表的另一种方法是直接拷贝表文件。通常可利用像cp、tar 或cpio 这样的实用程序来进行。当使用直接拷贝备份( direct-copy backup)方法时,必须确保没有使用这些表。如果在拷贝一个表的同时服务器正在修改它,则拷贝无效。

确保拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重新启动服务器。


2、数据库的恢复:
数据库系统出现崩溃时,应该使用最近的一次备份对数据库进行恢复,如果启用了更新日志,还需要重新执行更新日志中最近一次备份之后对数据库进行修改的任何查询,以尽可能将数据恢复到崩溃时刻所处的状态。
# mysql –u root –p sales < sales_bak030630.sql

优化表
在大多数情况下,优化表的做法很值得。当一个表被多次修改,那它的结构将很快变得支离破碎,其结果是导致性能的下降。这个时候可以使用OPTIMIZE TABLE 命令来刷新,清理出空间。
mysql>OPTIMIZE TABLE tablename;

导入和导出记录
INSERT语句不是向表中插入记录的唯一方法,MySQL还允许使用LOAD DATA INFILE 命令一次性插入多条记录。这个命令可以从文本文件读出原始数据(该文件可以放置在连接服务器上或者客户端),在列和行界定符号的基础上进行分析,然后自动产生INSERT 语句来向一个表写数据。


导入数据
默认情况下,MySQL认为数据文件是在服务器上,在LOAD DATA INFILE 语句中指定位置。
如果想要使用客户机上的数据,可以在语句中添加LOCAl关键字,告诉MySQL在客户机的文件系统上查找文件。
mysql>LOAD DATA LOCAL INFILE ‘c:\\data.txt'
INTO TABLE user
FIELDS TERMINATED BY ‘,' LINES TERMINATED BY ‘\n';

最好在此之前加上如下命令
mysql>LOAD DATA LOW_PRIORITY INFILE ‘data.txt' INTO TABLE user;
当然还有IGNORE REPLACE等关键字。

导出数据
如果不指定一个FIELDS子句,缺省值与这样写的相同:
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
如果不指定一个LINES子句,缺省值与这样写的相同:
LINES TERMINATED BY '\n'
换句话说,缺省值导致读取输入时,LOAD DATA INFILE表现如下:
在换行符处寻找行边界
在定位符处将行分成字段
不要期望字段由任何引号字符封装
将由“\”开头的定位符、换行符或“\”解释成字段值的部分字面字符

导出数据
相反,缺省值导致在写入输出时,SELECT ... INTO OUTFILE表现如下:
在字段之间写定位符
不用任何引号字符封装字段
使用“\”转义出现在字段中的定位符、换行符或“\”字符
在行尾处写换行符
注意,为了写入FIELDS ESCAPED BY '\\',对作为一条单个的反斜线被读取的值,你必须指定2条反斜线值。