一.DDL语句
1. 创建数据库
mysql> create database test1;
2. 删除数据库
mysql> drop database test1;
3. 选择数据库
Mysql>use dbname
4. 查看数据库
mysql> show databases;
5. 查看表信息
mysql> show tables;
6. 查表结构信息
Mysql>desc 表名;
7. 查看表结构详细信息
Mysql>show create table 表名 G;
8. 创建表
Mysq>create table 表名 (字段 字段类型,字段 字段类型,….);
9 删除表
Mysql>drop table 表名;
10. 修改表【类型】字段的定义值
Mysql> alter table 表名 modify 字段 字段类型;
modify:为参数
11. 在表中增加字段
Mysql>alter table 表名 add column 字段 字段类型;
add column:为参数
12.在表中删除字段
Mysql>alter table 表名 drop column 字段;
drop column:为参数
13.在表中字段改名
Mysql> alter table 表名 change 旧字段名 新字段名 新字段类型; change:为参数
注释:modify 和 change都可以修改表的定义,但是modify不可以修改名称,而change可以修改名称;
14 .修改字段排列顺序
例如:将新加的字段A char(10)加B字段后面;
Mysql> alter table 表名 add A char(10) after B;
first[前面]|after[后面]:为参数
15 把某个字段放在最前面
Mysql> alter table 表名 modify 字段 字段类型 first;
16 更改表的名称
Mysql> alter table 旧表名名 rename 新表名;
rename:为参数
二.DML语句
1. 在表中插入数据
Mysql> insert inot 表名 (字段,字段…..字段)values (‘值1’,‘值2’);
Mysql> insert inot 表名 values (‘值1’,‘值2’);
Mysql> insert inot 表名 values (‘值1’,‘值2’), (‘值1’,‘值2’) (‘值1’,‘值2’);
三种情况
2. 更新记录
Mysql> update 表名 set 字段1=值,字段2=值 where 条件;
3. 删除数据记录
Mysql> delete from 表名 where 条件;
4. 查询记录
Mysql> select * from 表名;
Mysql> select 字段1,字段2 from 表名;
Mysql> select 字段1,字段2 from 表名 where 条件; 条件查询
条件:= 等于
> 大于
< 小于
>= 大于或等于
<= 小于或等于
!= 不等于
Or 和
And 而
Mysql> select distinct 字段…. from 表名; 查询结果不出现重复
Distinct:参数代表不重复出现;
Mysql> select * from 表名 order by [DESC和ASC] 字段; 查询进行排序
DESC和ASC为参数:
DESC:表示小到大降序摆列
ASC :表示大到小升序摆列 默认为ASC
Mysql> select * from 表名 order by [DESC和ASC] 字段 limit n; 查询摘要
比如:Mysql> select * from 表名 order by [DESC和ASC] 字段 limit 3;
3:表示所查询出的结果取前3行;
比如:Mysql> select * from 表名 order by [DESC和ASC] 字段 limit 1,3;
1,3:表示所查询出的结果取其中的第二行;
统计总人数
Mysql> selecet count(1) from 表名;
统计部门人数
Mysql> select 字段1,count(1) from 表名 group by 字段1;
即统计部门人数 又统计总人数,
Mysql> select 字段1,count(1) from 表名 group by 字段1 with rollup;
统计大于1人部门
Mysql> select 字段1,count(1) from 表名 group by 字段1 having count(1)>1;
统计总额、最高、最低
Mysql> select sum(字段),max(字段),min(字段) from 表名;
mysql> select * from emp;
+--------------+------------+------+--------+
| name | hiredate | sal | deptno |
+--------------+------------+------+--------+
| qtt | 2011-08-08 | 3000 | 2 |
| xieqiangneng | 2010-08-07 | 6000 | 1 |
| ty | 2011-02-04 | 4000 | 2 |
+--------------+------------+------+--------+
mysql> select * from emp;
+--------------+------------+------+--------+
| name | hiredate | sal | deptno |
+--------------+------------+------+--------+
| qtt | 2011-08-08 | 3000 | 2 |
| xieqiangneng | 2010-08-07 | 6000 | 1 |
| ty | 2011-02-04 | 4000 | 2 |
| t210 | 2010-02-02 | 4500 | 3 |
+--------------+------------+------+--------+
左连接,查询用户所在的部门;
mysql> select name,deptname from emp left join dept on emp.deptno=dept.deptno;
+--------------+----------+
| name | deptname |
+--------------+----------+
| qtt | sale |
| xieqiangneng | tech |
| ty | sale |
| t210 | hr |
+--------------+------------+------+--------+
右连接
mysql>select name,deptname from dept right join emp on dept.deptno=emp.deptno;
+--------------+----------+
| name | deptname |
+--------------+----------+
| qtt | sale |
| xieqiangneng | tech |
| ty | sale |
| t210 | hr |
+--------------+----------+
定义别名查询
mysql> select Host AS 主机,User As 用户 from user;
+----------------+------+
| 主机 | 用户 |
+----------------+------+
| % | xqn |
| 127.0.0.1 | root |
| localhost | |
| localhost | root |
| www.oracle.org | |
| www.oracle.org | root |
三 . 用户管理
2、指定授权
使用myuser/mypassword从任何主机连接到mysql服务器:
Mysql> GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%' IDENTIFIED BY '123qwe' WITH GRANT OPTION;
使用myuser/mypassword从ip为192.168.225.166的主机连接到mysql服务器:
Mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.225.166' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
Mysql> grant select,update,insert,delete on mysql.* to ‘xqn’@’%’;
3、泛授权
mysql -h localhost -u root
mysql>GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%' IDENTIFIED BY '123qwe' WITH GRANT OPTION; //赋予任何主机上以root身份访问数据的权限
mysql>FLUSH PRIVILEGES;
可以用mysqladmin命令在命令行指定密码:
shell> mysqladmin -u user_name -h host_name password "newpwd"
该命令重设密码的账户为user表内匹配User列的user_name和Host列你发起连接的客户端的记录。
从新设置密码
为账户赋予密码的另一种方法是执行SET PASSWORD语句:
mysql> SET PASSWORD FOR 'xqn'@'%' = PASSWORD('123456');
只有root等可以更新mysql数据库的用户可以更改其它用户的密码。如果你没有以匿名用户连接,省略FOR子句便可以更改自己的密码:
mysql> SET PASSWORD = PASSWORD('123456');
你还可以在全局级别使用GRANT USAGE语句(在*.*)来指定某个账户的密码而不影响账户当前的权限:
mysql> GRANT USAGE ON *.* TO 'xqn'@'%' IDENTIFIED BY '123456';
四.mysql主从配置
Mysql主服务器上的配置
1】 在主服务器上,设置一个负责用户xqn,并授权REPLICATION SLAVE 权限,可以从IP为192.168.1.2的主机进行连接。
Mysql> grant replication slave on *.* to ‘test’@’192.168.1.2’ identified by ‘123456’;
2】 修改主数据库服务器的配置文件my.cnf ,开启BINLOG,并设置server-id的值;需要重启服务;
#vi /et
c/my.cnf
[mysqld]
Log-bin = /usr/local.mysql/log/mysql-bin.log
Server-id=1
3】 在主服务器设置读锁有效;
Mysql> flush tables with read lock;
4】 在主服务器查看当前二进制日志名和偏移量值;
Mysql> show master status;
5】 备份主服务器的数据,如果是刚刚安装好的服务器没有什么新的数据不需要备份;备份方式很多种,自己选吧;
6】 恢复主服务器的写的操作;
Mysql> unlock tables;
mysql从服务器上配置
7】 如果在主服务有备份文件,直接把的主的服务器的备份文件解开放到从服务器数据安装的相应的目录;如果没有备份就不需要这一步了;
8】 修改从服务器的配置文件my.cnf,增加server-id的参数;
[mysqld]
Server-id = 2
9】 在从服务器在,指定复制使用的用户、主服务器的IP、端口、开始执行复制的日志文件和位置;
Mysql> change master to
master_host='192.168.1.1',
master_port=3306,
master_user='test',
master_password='123456',
master_log_file='mysql-bin.000005',
master_log_pos=242;
注释:master_log_file='mysql-bin.000005',和master_log_pos=106;的值就是下图值,也就主服务器的二进制日志名和偏移量值;
10】 在从服务器上,启动slave线程
Mysql> start slave;
11】 查看是否连接成功
mysql> show processlist G
这表明slave已经连接上了master;
测试主从服务器
1. 在主服务器新一个数据库xqn_test,然后创建的test表,看看能不同步到从服务器上;
五 Mysql主从同步单个数据库
mysql 主从配置
mysql主:10.39.0.105
mysql从:10.39.0.106
+++++++++++++++++++++++++++
要求:同步10.39.0.105的pdata和process数据库到10.39.0.106上;
但是mysql数据库不进行同步
+++++++++++++++++++
+mysql主服务器配置+
+++++++++++++++++++
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id = 1
log_bin = /data1/mysql/log/mysql-bin.log
binlog-do-db = pdata binlog-do-db:设置需要同步的数据库
binlog-do-db = process
binlog-ignore-db = mysql binlog-ignore-db:设置不需要同步的数据库
#创建用于同步的用户
#mysql -u root -p
mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'replication'@'10.39.0.106' IDENTIFIED BY '123456';
#复制数据到从库:
#service mysqld stop
(或对数据库进行锁操作)
#mysql -u root -p
mysql>FLUSH TABLES WITH READ LOCK;
#cd /var/lib/mysql
#tar mysql.tar.gz pdata/ process/
#scp ./mysql.tar.gz root@10.39.0.106:/var/lib/mysql
#mysql mysql start
#mysql -u root -p
mysql>UNLOCK TABLES;
mysql> show master status;
+------------------+----------+---------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+---------------+------------------+
| mysql-bin.000011 | 618 | pdata,process | mysql |
+------------------+----------+---------------+------------------+
+++++++++++++++++++
+mysql从服务器配置+
+++++++++++++++++++
#vi /etc/my.conf
[mysqld]
log-bin=mysql-bin
server-id = 2
log_bin = /data1/mysql/log/mysql-bin.log
master-host = 10.39.0.105
master-user = replication
master-pass = 123456
master-port = 3306
master-connect-retry=60
replicate-do-db = pdata
replicate-do-db = process
replicate-ignore-db = mysql
#装载主服务器数据库
#cd /var/lib/mysql
#tar -zxvf mysql.tar.gz
#rm -rf mysql.tar.gz
#/etc/init.d/mysqld restart
#同步数据
#mysql -u root -p
mysql>CHANGE MASTER TO
MASTER_HOST='10.39.0.105',
MASTER_USER='replication',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000011',
MASTER_LOG_POS=618;
如果执行报错解决方法:
mysql> slave stop;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> reset slave;
Query OK, 0 rows affected,(0.00 sec)
这样就完成mysql主从设置了,你可以执行
mysql > show slave status G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 这两行也yes表示成功;
测试吧
六 mysql配置多个实例
#tar mysql...tar.gz
#./configure --prefix=/usr/local/mysql --datadir=/usr/local/mysql/data1 --sysconfdir=/etc
###################################################################################
mysql> GRANT ALL PRIVILEGES ON *.* TO mysql@'localhost' IDENTIFIED BY '123qwe' WITH GRANT OPTION;
mysql> flush privileges;
#cd /usr/local/mysql
#mkdir data2 data4 data4
#cp -rv data1/mysql data2
#cp -rv data1/mysql data3
#cp -rv data1/mysql data4
#chow -R mysql.mysql data*
# ls -l /usr/local/mysql/
drwxr-xr-x 6 mysql mysql 4096 Apr 9 17:54 data4
drwxr-x--- 2 mysql mysql 4096 Apr 9 17:14 data1
drwxr-xr-x 3 mysql mysql 4096 Apr 9 17:54 data2
drwxr-xr-x 3 mysql mysql 4096 Apr 9 17:54 data3
修改mysql的配置文件
#vi /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = mysql
password = 123qwe
[mysqld1]
port = 3306
socket = /tmp/mysql.sock1
pid-file=/usr/local/mysql/data1/db-app1.pid
log=/usr/local/mysql/data1/db-app.log
datadir = /usr/local/mysql/data
user = mysql
[mysqld2]
port = 3307
socket = /tmp/mysql.sock2
pid-file = /usr/local/mysql/data2/db-app2.pid
datadir = /usr/local/mysql/data2
log=/usr/local/mysql/data2/db-app.log
user = mysql
[mysqld3]
port = 3308
socket = /tmp/mysql.sock3
pid-file = /usr/local/mysql/data3/db-app3.pid3
datadir = /usr/local/mysql/data3
log=/usr/local/mysql/data3/db-app.log
user = mysql
[mysqld4]
port = 3309
socket = /tmp/mysql.sock4
pid-file = /usr/local/mysql/data4/db-app4.pid
datadir = /usr/local/mysql/data4
log=/usr/local/mysql/data4/db-app.log
user = mysql
#cd mysql-5.0.56/scripts 进入源码安装目录 重新初使化数据库目录
#mysql-5.0.56/scripts /mysql_install_db --usrer=mysql --datadir=/usr/local/mysql/data1
#./mysql_install_db --usrer=mysql --datadir=/usr/local/mysql/data2
#./mysql_install_db --usrer=mysql --datadir=/usr/local/mysql/data3
#./mysql_install_db --usrer=mysql --datadir=/usr/local/mysql/data4
#/usr/local/mysql/bin/mysqld_multi --config-file=/etc/my.cnf start 1 只启动第一个服务
#/usr/local/mysql/bin/mysqld_multi --config-file=/etc/my.cnf start 1-4 启动所以的服务 【】
# /usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/my.cnf start 2
#[root@sr2 ~]# netstat -ant | grep 33
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3309 0.0.0.0:* LISTEN
############
#连接数据库#
############
启动 mysql:
cd /usr/local/mysql/bin/mysqld_safe --socket=/tmp/mysql.sock2 --port=3307 &
给 root 指定密码:
/usr/local/mysql/bin/mysqladmin --socket=/tmp/mysql.sock1 --port=3308 -u root password '密码'
修改 root 对应的 host 为 '%' 以允许在任意 ip 访问(默认是 localhost)。需要进入 mysql 命令行:
/usr/local/mysql/bin/mysql --socket=/tmp/mysql.sock2 --port=3307 -u root -p
mysql> use mysql;
mysql> update user set host='%' where user='root';
需要刷新授权信息:
mysql> flush privileges;
如果不行的话试试重启 mysql:
/usr/local/mysql/bin/mysqladmin -u root --socket=/tmp/mysql.sock2 --port=3307 -p reload