
一. 主从服务器原理 1
二. MySQL主从配置的优点和实验环境 3
三. 主从数据库服务器的配置 4
1. 配置两台Linux 服务器的 ip 地址 4
2. 主机从机安装MySQL 4
3. 配置主服务器 8
4. 配置从服务器 8
5. 查看同步情况 9
四. 验证 11
1. 增加。 11
2. 修改。 12
3. 删除 13
五. 监控服务器的状态 14
1. 监控主服务器的状态 14
2. 监控从服务器的状态 14
3. 从数据库常用命令 14
六. 常见问题与解答 15
七. 附件 18
1. MySQL基本命令 18
一.主从服务器原理
MySQL的 Replication 是一个异步的复制过程,从一个 MySQL instace(我们称之为 Master)复制到另一个MySQL instance(我们称之 Slave)。在 Master 与 Slave之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master端。
要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary Log(MySQL-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用“—log-bin” 参数选项,或者在 my.cnf 配置文件中的 MySQLd 参数组([MySQLd]标识后的参数部分)增加“log-bin” 参数项。
MySQL 复制的基本过程拓扑图如下:
1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 BinaryLog 中的位置;
3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的RelayLog文件(MySQL-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”
4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave端执行了同样的 Query,所以两端的数据是完全一样的。
二.MySQL主从配置的优点和实验环境
优点:
1.解决web应用系统,数据库出现的性能瓶颈,采用数据库集群的方式来实现查询负载;一个系统中数据库的查询操作比更新操作要多得多,通过多台查询服务器将数据库的查询分担到不同的查询服务器上从而提高查询效率。
2.MySQL数据库支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操作,而从数据库则专门用来进行数据查询操作,这样可以将更新操作和查询操作分担到不同的数据库上,从而提高了查询效率。
环境:
虚拟机:VMware Workstation 8.0.0
系统:RedHat Enterprise Linux 5
MySQL版本:MySQL-client-5.1.7-0.i386
MySQL-server-5.1.7-0.i386
服务器主机IP:192.168.0.2/24
服务器从机IP:192.168.0.3/24
网关IP:192.168.0.1/24
三.主从数据库服务器的配置
1.配置两台Linux 服务器的 ip 地址
主机IP:
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:B4:0B:D8
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
从机IP:
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:0F:65:D6
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
2.主机从机安装MySQL
主服务器:
安装服务器端:
[root@localhost lxy]# rpm -ivh MySQL-server-5.1.7-0.i386.rpm
Preparing... ########################################### [100%]
1:MySQL-server ########################################### [100%]
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'
See the manual for more instructions.
Please report any problems with the /usr/bin/mysqlbug script!
The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at https://order.mysql.com
Starting MySQL[确定]
查看MySQL的端口是否启动:(MySQL的端口号是3306)
[root@localhost lxy]# netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:744 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
主服务器安装客户端:
[root@localhost lxy]# rpm -ivh MySQL-client-5.1.7-0.i386.rpm
Preparing... ########################################### [100%]
1:MySQL-client ########################################### [100%]
用命令测试是否安装成功:
[root@localhost lxy]# mysql
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 1 to server version: 5.1.7-beta
Type 'help;' or '\\h' for help. Type '\\c' to clear the buffer.
mysql>
由于MySQL的默认用户名是 root 由于初始没有密码,所以第一次进入时只需键入mysql即可。当出现“mysql>”的时候 说明已经安装成功了。
增加密码:
用户名root 密码是84666058
[root@localhost lxy]# /usr/bin/mysqladmin -u root password 84666058
测试不用密码登陆
[root@localhost lxy]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
登陆不成功 说明密码已经启用
用密码登陆
[root@localhost lxy]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 9 to server version: 5.1.7-beta
Type 'help;' or '\\h' for help. Type '\\c' to clear the buffer.
mysql>
登陆成功。
启动mysql
[root@localhost lxy]# /etc/init.d/mysql start
Starting MySQL [确定]
停止命令是:
/usr/bin/mysqladmin –u root –p shutdown
给MySql 添加一个 lxy 用户密码123
mysql> grant select,insert,update,delete on *.* to lxy@"%" identified by "123";
Query OK, 0 rows affected (0.00 sec)
登陆验证
[root@localhost lxy]# mysql -u lxy -p -h 192.168.0.2
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 18 to server version: 5.1.7-beta
Type 'help;' or '\\h' for help. Type '\\c' to clear the buffer.
mysql>
在数据库中建立数据库lxy和表name:
mysql> create database lxy;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+---------------------+
| Database |
+---------------------+
| information_schema |
| cluster_replication |
| lxy |
| mysql |
| test |
+---------------------+
5 rows in set (0.00 sec)
首先要先选中要更改的数据库mysql> use 1xy
Name表(包含id 序号自动增长;xm姓名;xb性别;csny出生年月。)
mysql> create table name (id int(3) auto_increment not null primary key,xm char(8),xb char(2),csny date);
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+---------------+
| Tables_in_lxy |
+---------------+
| name |
+---------------+
1 row in set (0.00 sec)
mysql> describe name;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(3) | NO | PRI | NULL | auto_increment |
| xm | char(8) | YES | | NULL | |
| xb | char(2) | YES | | NULL | |
| csny | date | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
在表里增加几条记录
mysql> insert into name values('','张三','男','1988-10-10');
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> insert into name values('','斯','男','1988-10-10');
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> insert into name values('','陆宇','男','1988-10-10');
Query OK, 1 row affected, 2 warnings (0.00 sec)
检查
mysql> select*from name;
+----+--------+------+------------+
| id | xm | xb | csny |
+----+--------+------+------------+
| 1 | 张三 | 男 | 1988-10-10 |
| 2 | 斯 | 男 | 1988-10-10 |
| 3 | 陆宇 | 男 | 1988-10-10 |
+----+--------+------+------------+
3 rows in set (0.00 sec)
从服务器数据库的安装和主服务器一样。
3.配置主服务器
复制配置文件到/etc/文件夹下:
[root@localhost lxy]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
Vim指令编辑/etc/my.cnf文件并添加以下信息:
server-id = 1 ###每一个数据库服务器都要制定一个唯一的server-id,通常主服务器制定为1###
binlog-do-db=test ###需要记录日志的数据库名,如果复制多个数据库,重复这只这项即可。如果没有本行即表示同步所有的数据库。###
binlog-ignore-db=mysql ###不需要记录日志的数据库名,如果复制多个数据库,重复这只这项即可###
log-bin=mysql-bin ###MySQL进行主从复制是通过二进制的日志文件来进行的,所以必须开启MySQL的日志功能(这个是/etc/my.cnf的默认配置,保持不变即可)###
重启服务:
[root@localhost lxy]# service mysql restart
Shutting down MySQL. [确定]
Starting MySQL [确定]
授权给从数据库服务器 192.168.0.3
mysql> GRANT REPLICATION SLAVE ON *.* to 'lxy'@'192.168.0.3' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)
查看主服务器状态:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 102 | lxy | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
4.配置从服务器
复制配置文件到/etc/文件夹下:
[root@localhost ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
Vim指令编辑/etc/my.cnf文件并添加以下内容:
server-id = 2 ###设置从服务器的ID号###
mast-host = 192.168.0.2 ###设置主服务器的IP###
mast-user = lxy ###设置连接主服务器的用户名###
mast-password = 123###设置连接主服务器的密码###
mast-port = 3306 ###配置成端口默认是3306###
replicate-do-db=test###设置要同步的数据库,可以设置多个###
从服务器数据库配置:
mysql> slave stop;
Query OK, 0 rows affected (0.00 sec)
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql_bin.000001',MASTER_LOG_POS=102;
Query OK, 0 rows affected (0.01 sec)
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
5.查看同步情况
mysql> show slave status\\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.2
Master_User: lxy
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 102
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 243
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: lxy
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 102
Relay_Log_Space: 243
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.00 sec)
如果出现Slave_IO_Running:Yes 和 Slave_SQL_Running: Yes 就说明已经成功了。
四.验证
1.增加。
在主服务器建数据库test上创建一个表name
mysql> use test
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table name (id int(3) auto_increment not null primary key,xm char(8),xb char(2),csny date);
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| name |
+----------------+
1 row in set (0.00 sec)
mysql> describe name;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(3) | NO | PRI | NULL | auto_increment |
| xm | char(8) | YES | | NULL | |
| xb | char(2) | YES | | NULL | |
| csny | date | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
mysql> insert into name values('','zhangsan','nan','1990-1-1');
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> select*from name;
+----+----------+------+------------+
| id | xm | xb | csny |
+----+----------+------+------------+
| 1 | zhangsan | na | 1990-01-01 |
+----+----------+------+------------+
1 row in set (0.00 sec)
从服务器上面查看:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| name |
+----------------+
1 row in set (0.00 sec)
mysql> describe name;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(3) | NO | PRI | NULL | auto_increment |
| xm | char(8) | YES | | NULL | |
| xb | char(2) | YES | | NULL | |
| csny | date | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select*from name;
+----+----------+------+------------+
| id | xm | xb | csny |
+----+----------+------+------------+
| 1 | zhangsan | na | 1990-01-01 |
+----+----------+------+------------+
1 row in set (0.00 sec)
2.修改。
mysql> select*from name;
+----+----------+------+------------+
| id | xm | xb | csny |
+----+----------+------+------------+
| 1 | zhangsan | na | 1990-01-01 |
| 2 | lxy | na | 1990-01-01 |
+----+----------+------+------------+
2 rows in set (0.00 sec)
修改后:
mysql> update name set csny='19-02-02'where xm='lxy';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select*from name;
+----+----------+------+------------+
| id | xm | xb | csny |
+----+----------+------+------------+
| 1 | zhangsan | na | 1990-01-01 |
| 2 | lxy | na | 19-02-02 |
+----+----------+------+------------+
2 rows in set (0.00 sec)
从服务器也跟着变为:
mysql> select*from name;
+----+----------+------+------------+
| id | xm | xb | csny |
+----+----------+------+------------+
| 1 | zhangsan | na | 1990-01-01 |
| 2 | lxy | na | 19-02-02 |
+----+----------+------+------------+
2 rows in set (0.00 sec)
3.删除
删除表中zhangsan。
mysql> delete from name where xm='zhangsan';
Query OK, 1 row affected (0.01 sec)
mysql> select*from name;
+----+------+------+------------+
| id | xm | xb | csny |
+----+------+------+------------+
| 2 | lxy | na | 19-02-02 |
+----+------+------+------------+
1 row in set (0.00 sec)
从数据库里也同样和主服务器同步
mysql> select*from name;
+----+------+------+------------+
| id | xm | xb | csny |
+----+------+------+------------+
| 2 | lxy | na | 19-02-02 |
+----+------+------+------------+
1 row in set (0.00 sec)
验证成功。
五.监控服务器的状态
1.监控主服务器的状态
可通过show master status来监控主服务器的状态,内容如下:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 102 | lxy | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
其中File表示日志文件记录,Position表示日志文件的位置,这个也是数据库执行复制操作的必须标识,后面两字段表示复制的数据库名和不复制的数据库名,也可以在配置文件中你进行配置。
2.监控从服务器的状态
可以通过:show slave status\\G来查看,另外如果从数据库在复制的过程中出现问题,可以通过命令reset slave从数据库服务器复制的线程,从数据库服务器的通常操作命令有:start slave; ####启动复制线程
stop slave; ####停止复制线程
reset slave; ####重置复制线程
change master to; ###动态改变到主服务器的配置
3.从数据库常用命令
slave start --启动复制线程
slave stop --停止复制线程
reset slave --重置复制线程
show slave status --显示复制线程的状态
show slave status\\G --显示复制线程的状态(分行显示)
show master status\\G --显示主数据库的状态(分行显示)
show master logs --显示主数据库日志,需在主数据库上运行
change master to --动态改变到主数据库的配置
show processlist --显示有哪些线程在运行
六.常见问题与解答
1.现象:修改完配置后, 重启MySQL,提示MySQL manager or server PID file could not be found
解决:查找进程中的MySQL,kill掉
> service MySQL restart
> ps -aux|grep myslq
> kill 进程号
# service MySQL start
注:MySQL.sock文件在MySQL启动后才会生成,位置为/tmp下或/var/lib/MySQL/下
2.现象:从数据库无法同步,
show slave status显示Slave_SQL_Running为No,Seconds_Behind_Master为null
原因: a.程序可能在slave上进行了写操作
b.也可能是slave机器重起后,事务回滚造成的.
解决:方法一:
MySQL> slave stop;
MySQL> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
MySQL> slave start;
解决:方法二:
Slave库,MySQL> slave stop; --停掉slave服务
Master库,MySQL> show master status;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 102 | lxy | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
然后到slave服务器上执行手动同步
MySQL> change master to
> master_host='192.168.0.2',
> master_user='lxy',
> master_password='123',
> master_port=3306,
> master_log_file='MySQL-bin.000001',
> master_log_pos=102;
启动slave服务,MySQL> slave start;
通过show slave status查看Slave_SQL_Running为Yes,Seconds_Behind_Master为0,即为正常。
注:手动同步需要停止master的写操作!
3.现象:从数据库无法同步,
show slave status显示Slave_IO_Running为No,Seconds_Behind_Master为null
解决:重启主数据库
service MySQL restart
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 102 | lxy | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
MySQL> slave stop;
MySQL> change master to Master_Log_File=‘MySQL-bin.000001',Master_Log_Pos=102
MySQL> slave start;
4.主库中本身有数据的做法(my.cnf的配置与上面的完全相同,以下操作是指在完全配置好的前提下进行)
1)从库执行stop slave;
2)如果允许停止业务,进入主库,进入需要进行同步的库,执行锁表:
flush tables with read lock;
这一步的目的是使我们在制作主从的过程中,主库中不会有新的数据,否则会给我们的同步设置带来麻烦
3)完整的导出主库中需要同步的那个库
4)进入主库查看日志文件、日志节点并记录:
show master status\\G
5)从库执行在从库中导入从主库中导出的内容(mysqldump)
6)进入主库执行解锁:
unlock tables;
7)进入从库执行change命令切换同步日志文件与节点:
change master to master_host='192.168.3.178',master_user='tongbu',master_password='tongbu', master_log_file='刚才记录的日志文件名称' ,master_log_pos=刚才记录的日志节点;
8)开启同步进程,执行:
slave start;
5.库业务不能停的情况下为从库制作镜像:
服务器1号:主
服务器2号:从
现在由于负载问题需要上架服务器3号同样为1号的从服务器。
但是1号库不能停,2号也不能停,主从同步进程也不能停(要求苛刻)。
可以这样做:
在主:
mysqldump -uroot -pxxxx -h127.0.0.1 --databases db1 db2 db3 --master-data=1 > bak.sql
3号服务器slave stop;
之后将bak.sql导入3号从服务器
slave start;
3号服务器会自动从导出的那一刻的节点更新。
因为--master-data=1 这个参数在到处sql文件后会在最下方加上change语句。如果--master-data=0,则不会带有。
非常的方便,但仅适合库不是太大的情
况
七.附件
1.MySQL基本命令
1.显示数据库
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.04 sec)
Mysql刚安装完有两个数据库:mysql和test。mysql库非常重要,它里面有MySQL的系统信息,我们改密码和新增用户,实际上就是用这个库中的相关表进行操作。
2.显示数据库中的表
mysql> use mysql; (打开库,对每个库进行操作就要打开此库,类似于foxpro )
Database changed
mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+-----------------+
6 rows in set (0.01 sec)
3.显示数据表的结构:
describe 表名;
4.显示表中的记录:
select * from 表名;
例如:显示mysql库中user表中的纪录。所有能对MySQL用户操作的用户都在此表中。
Select * from user;
5.建库:
create database 库名;
例如:创建一个名字位aaa的库
mysql> create databases aaa;
6.建表:
use 库名;
create table 表名 (字段设定列表);
例如:在刚创建的aaa库中建立表name,表中有id(序号,自动增长),xm(姓名),xb(性别),csny(出身年月)四个字段
use aaa;
mysql> create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date);
可以用describe命令察看刚建立的表结构。
mysql> describe name;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(3) | | PRI | NULL | auto_increment |
| xm | char(8) | YES | | NULL | |
| xb | char(2) | YES | | NULL | |
| csny | date | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
7.增加记录
例如:增加几条相关纪录。
mysql> insert into name values('','张三','男','1971-10-01');
mysql> insert into name values('','白云','女','1972-05-20');
可用select命令来验证结果。
mysql> select * from name;
+----+------+------+------------+
| id | xm | xb | csny |
+----+------+------+------------+
| 1 | 张三 | 男 | 1971-10-01 |
| 2 | 白云 | 女 | 1972-05-20 |
+----+------+------+------------+
8.修改纪录
例如:将张三的出生年月改为1971-01-10
mysql> update name set csny='1971-01-10' where xm='张三';
9.删除纪录
例如:删除张三的纪录。
mysql> delete from name where xm='张三';
10.删库和删表
drop database 库名;
drop table 表名;
11.增加MySQL用户
格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"
例1、增加一个用户user_1密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:
mysql> grant select,insert,update,delete on *.* to user_1@"%" Identified by "123";
例1增加的用户是十分危险的,如果知道了user_1的密码,那么他就可以在网上的任何一台电脑上登录你的MySQL数据库并对你的数据为所欲为了,解决办法见例2。
例2、增加一个用户user_2密码为123,让此用户只可以在localhost上登录,并可以对数据库aaa进行查询、插入、修改、删除的操作(localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道user_2的密码,他也无法从网上直接访问数据库,只能通过 MYSQL主机来操作aaa库。
mysql>grant select,insert,update,delete on aaa.* to user_2@localhost identified by "123";
用新增的用户如果登录不了MySQL,在登录时用如下命令:
mysql -u user_1 -p -h x.x.x.x (-h后跟的是要登录主机的ip地址)
12.备份与恢复
1).备份
例如:将上例创建的aaa库备份到文件back_aaa中
[root@test1 root]# val/lib/mysql
[root@test1 mysql]# mysqldump -u root -p --opt aaa > back_aaa
2).恢复
[root@test mysql]# mysql -u root -p ccc < back_aaa
