??xml version="1.0" encoding="utf-8" standalone="yes"?> 1.关闭防火?br />[root@CentOS ~]# chkconfig iptables off 2.关闭selinux 3、配|CentOS 6.0 W三方yum源(CentOS默认的标准源里没有nginx软g包) 4.安装开发包和库文g 5.卸蝲已安装的apache、mysql、php 6.安装nginx 7.安装mysql 8.安装php 9.配置nginx支持php 10.配置php 11.重启nginx php-fpm 12.建立info.php文g 13.试nginx是否解析php q四U方式各有优~点Q开发者可以根据实际情况进行选择?/p>
要让容器和数据库l合理实体标识的自动生成,Ҏ实际情况的不同,开发者可以选择 @javax.persistence.GeneratedValue 每一个需要自动生成实体标识的实体都需要ؓ它的实体标识字段提供 使用 表示实体标识?OpenJPA 容器自动生成Q这也是 Strategy 属性的默认倹{?/p>
OpenJPA 容器用数据库的自增长字段为新增加的实体对象赋唯一|作ؓ实体的标识。这U情况下需要数据库提供对自增长字段的支持,常用的数据库中,HSQL、SQL Server、MySQL、DB2、Derby {数据库都能够提供这U支持?/p>
表示使用数据库的序列号ؓ新增加的实体对象赋唯一|作ؓ实体的标识。这U情况下需要数据库提供对序列号的支持,常用的数据库中,Oracle、PostgreSQL {数据库都能够提供这U支持?/p>
表示使用数据库中指定表的某个字段记录实体对象的标识,通过该字D늚增长为新增加的实体对象赋唯一|作ؓ实体的标识?/p>
@javax.persistence.SequenceGenerator 如果实体标识的自动生{略? @javax.persistence.TableGenerator 如果实体标识的自动生{略?GenerationType.TABLEQ开发者需要ؓ实体标识字段提供 TableGenerator 注释Q它的参数描qC使用数据库表生成实体标识的具体细节。该注释支持下列属性: 在上面的节中,我们了解了和实体标识自动生成相关的注释,接下来我们将l合一个简单的例子讲述如何分别使用q些实体标识自动生成{略实现实体标识的自动生成?/p>
我们首先假设有一? OpenJPA 容器默认的实体标识自动生成策略是由容器管理实体标识的自动生成Q容器管理的实体标识可以支持数值型和字W型两种。当容器理的实体标识是数字型时QOpenJPA 容器自动创徏一个数据库? 当容器管理的实体标识是字W串cdӞOpenJPA 支持使用 uuid-string ?uuid-hex 两种方式生成相应的实体标识。如果我们选择使用 uuid-string 方式生成实体标识ӞOpenJPA 框架会自动ؓ实体生成一?128 位的 UUIDQƈ且将q个 UUID 转化Z?16 位字W表C的字符丌Ӏ如果我们选择使用 uuid-hex 方式生成实体标识ӞOpenJPA 框架会自动ؓ实体生成一?128 位的 UUIDQƈ且将q个 UUID 转化Z?32 位字W表C的 16 q制的字W串?/p>
数值标?/strong> 容器理的实体标识可以是数值型的,OpenJPA 框架理的实体标识借助于数据库的表来实玎ͼ在运行时 OpenJPA 框架会自动在数据库中创徏? 我们要用注释描q? 保存 容器理实体标识的情况下Qؓ了获得实体标识,应用E序不得不频繁地和数据库交互,q会影响应用E序的运行效率。OpenJPA 中用实体标识缓存机制解册个问题。默认情况下Q当应用E序W一ơ获取实体标识时QOpenJPA 框架从数据库中一ơ性获?50 个连l的实体标识~存hQ当下一ơ应用程序需要获取实体标识时QOpenJPA 首先检缓存中是否存在实体标识Q如果存在,OpenJPA 直接用缓存中的实体标识,如果不存在,OpenJPA 框架会从数据库中再ơ获?50 个连l的实体标识~存hQ如此类推。这L处理方式可以大大减少׃获取实体标识而生的数据库交互,提升应用E序的运行效率?/p>
当实体标识成功获取之后,OpenJPA 框架会把当前实体标识的最大?+1 后持久化到数据库中。由于实体标识缓存的原因Q当我们W一ơ获取实体标识后QOpenJPA 会将 OpenJPA ~存的实体标识不是永久存在的Q只能在同一? 容器理的实体标识还有一个非帔R要的Ҏ:所有被容器理的实体标识都是共享的。不?OpenJPA 容器中存在多个不同的被容器理的实体标识,它们都会从同一个实体标识缓存中获取实体标识。我们可以用下面的例子说明这U情况:假设 OpenJPA 容器中存在两个实体类 uuid-string 要?uuid-string 机制自动生成实体标识Q我们需要将实体主键字段? uuid-hex 要?uuid-hex 机制自动生成实体标识Q我们必d实体主键字段? 自增长字D| HSQL、SQL Server、MySQL、DB2、Derby {数据库提供的一U特性,用于为数据库的记录提供自动增长的~号Q应用程序的设计者通常期望实体标识的自动生成委托l数据库的这U特性,OpenJPA 框架中的实体标识能够满应用E序设计者的要求Q用数据库的自增长字段为实体自动生成标识?/p>
要将实体标识的自动生成委托给数据库的自增长字D늉性,需要数据库和实体定义的双方配合才能够达刎ͼ首先Q必d实体标识字段对应的数据库列修改ؓ自动增长列,另外q需要将实体cM实体标识字段? 我们?Animal 实体?HSQL 数据库中的持久化来说明如何用自增长字段自动生成实体标识所需要采取的步骤Q?/p>
首先Q我们用下面的 SQL 语句创徏 Animal 表,把它? 在数据库部分表的主键字D设|ؓ自动增长字段后,在实? 序列h Oracle、PostgreSQL {数据库提供的一U特性,用于为数据库的记录提供自动增长的~号Q?Oracle、PostgreSQL {数据库应用E序的设计者通常期望实体标识的自动生成委托l数据库的这U特性,OpenJPA 框架中的实体标识能够满应用E序设计者的要求Q用数据库的序列号为实体自动生成标识?/p>
要将实体标识的自动生成委托给数据库的序列L性,需要数据库和实体定义的双方配合才能够达刎ͼ首先Q必d数据库中创徏合适的序列P另外q需要ؓ实体标识字段提供 我们?Animal 实体?Oracle 数据库中的持久化来说明如何用自增长字段自动生成实体标识所需要采取的步骤Q?/p>
首先Q在 Oracle 数据库中q行下面?SQL 语句创徏名ؓ 然后Q在 Oracle 数据库中Q我们用下面的 SQL 语句创徏 在数据库部分创徏合适的序列号和相应的数据库表后Q在实体 除了使用容器生成的实体标识,或者借助于数据库的自增长字段或者序列号{方式生成实体标识之外,我们q可以选择借助数据库表来自动生成实体标识。原理是我们提供一个独立的数据库表Q该表的主键?( 假设列名 要将实体标识的自动生成委托给数据库表Q需要数据库和实体定义的双方配合才能够达刎ͼ首先Q必d数据库中创徏合适的保存实体标识的表Q另外还需要ؓ实体标识字段提供 我们?Animal 实体cL说明使用数据库表自动生成实体标识所需要采取的步骤Q我们假讑֭在这L场景QAnimal 实体的标识由应用E序中自定义的数据库? 首先Q在数据库中使用下面?SQL 语句创徏名ؓ 在数据库部分创徏合适的数据库表后,在实?Animal 的定义中Q我们需要将 上面的章节中我们学习了分别用四U方式来自动生成实体的标识,׃q四U情况下QAnimal 实体的标识都?OpenJPA 和数据库协作后自动生成,对于开发者而言Q这个过E是透明的,因此我们可以使用相同的方式来创徏q些实体Q创建新?Animal 实例的时候不再需要ؓ主键字段提供属性|只需要设|?Animal 实例的非标识字段 本文介绍了开发者?OpenJPA 实现实体标识自动生成时可选择使用的注释,q且l合单的例子Q分别介l了 OpenJPA 中实现容器管理的实体标识自动生成、结合数据库自增长字Dc序列号、数据库表等Ҏ实现实体标识自动生成时注释的具体用法和操作步骤?/p>
因ؓ在重新设|MySQL的root密码的期_MySQL数据库完全出于没有密码保护的
状态下Q其他的用户也可以Q意地d和修改MySQL的信息。可以采用将MySQL?
外的端口闭Qƈ且停止Apache以及所有的用户q程的方法实现服务器的准安全
状态。最安全的状态是到服务器的Console上面操作Qƈ且拔掉网Uѝ?
2Q修改MySQL的登录设|:
# vi /etc/my.cnf
在[mysqld]的段中加上一句:skip-grant-tables
例如Q?
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables
保存q且退出vi?
3Q重新启动mysqld
# /etc/init.d/mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]
4Q登录ƈ修改MySQL的root密码
# /usr/bin/mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.56
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> USE mysql ;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> flush privileges ;
Query OK, 0 rows affected (0.01 sec)
mysql> quit
Bye
5Q将MySQL的登录设|修改回?
# vi /etc/my.cnf
刚才在[mysqld]的段中加上的skip-grant-tables删除
保存q且退出vi?
6Q重新启动mysqld
# /etc/init.d/mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]
]]>
vi /etc/sysconfig/selinux
//SELINUX=enforcing修改为disabled然后重启生效
[root@CentOS ~]# yum install wget
//下蝲wget工具
[root@CentOS ~]# wget http://www.atomicorp.com/installers/atomic
//下蝲atomic yum?br />[root@CentOS ~]# sh ./atomic
//安装提示输入时输yes
[root@CentOS ~]# yum check-update
//更新yum软g?/p>
[root@CentOS ~]# yum -y install ntp make openssl openssl-devel pcre pcre-devel libpng
libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel
gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libmcrypt libmcrypt-devel libxml2
libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33 curl curl-devel
[root@CentOS ~]# yum remove httpd
[root@CentOS ~]# yum remove mysql
[root@CentOS ~]# yum remove php
[root@CentOS ~]# yum install nginx
[root@CentOS ~]# service nginx start
[root@CentOS ~]# chkconfig --levels 235 nginx on
//???U别开机启?/p>
[root@CentOS ~]# yum install mysql mysql-server mysql-devel
[root@CentOS ~]# service mysqld start
[root@CentOS ~]# chkconfig --levels 235 mysqld on
[root@CentOS ~]# mysqladmin -u root password "123456"
//为root用户讄密码
[root@CentOS ~]# service mysqld restart
//重启mysql
[root@CentOS ~]# yum install php lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap
php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap
php-tidy php-common php-devel php-fpm
//安装php和所需lg使PHP支持MySQL、FastCGI模式
[root@CentOS ~]# service php-fpm start
[root@CentOS ~]# chkconfig --levels 235 php-fpm on
[root@CentOS ~]# mv /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
//配|文件改为备份文?br />[root@CentOS ~]# cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf
//׃原配|文件要自己d因此可以使用默认的配|文件作为配|文?br />//修改nginx配置文gQ添加fastcgi支持
[root@CentOS ~]# vi /etc/nginx/nginx.conf
index index.php index.html index.htm;
//加入index.php
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
//以上代码注释去掉,q修Ҏnginx默认路径
//~辑文gphp.iniQ在文g末尾dcgi.fix_pathinfo = 1
[root@CentOS ~]# vi /etc/php.ini
[root@CentOS ~]# service nginx restart
[root@CentOS ~]# service php-fpm restart
[root@CentOS ~]# vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>
输入Q?92.168.1.105/info.php
昄php界面说明解析成功
]]>
Ҏ自己的实际需要,做了一些修改:
SHELL脚本:mysqld_kill_sleep.sh
mysql_pwd="root的密?/span>"
mysqladmin_exec="/usr/local/bin/mysqladmin"
mysql_exec="/usr/local/bin/mysql"
"/tmp"
mysql_timeout_log="$mysql_timeout_dir/mysql_timeout.log"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
"$mysql_timeout_dir/mysql_kill_timeout.log"
$mysqladmin_exec -uroot -p"$mysql_pwd" processlist | awk '{ print $12 , $2 ,$4}' | grep -v Time | grep -v '|' | sort -rn > $mysql_timeout_log
awk '{if($1>30 && $3!="root") print "'""$mysql_exec""' -e " "/"" "kill",$2 "/"" " -uroot " "-p""/"""'""$mysql_pwd""'""/"" ";" }' $mysql_timeout_log > $mysql_kill_timeout_sh
echo "check start ." >> $mysql_kill_timeout_log
echo `date` >> $mysql_kill_timeout_log
cat $mysql_kill_timeout_sh
把这个写到mysqld_kill_sleep.sh。然后chmod 0 mysqld_kill_sleep.sh,chmod u+rx mysqld_kill_sleep.shQ然后用root账户到cron里面q行卛_Q时间自p整。执行之后显C:
www# ./mysqld_kill_sleep.sh
/usr/local/bin/mysql -e "kill 27549" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27750" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27840" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27867" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27899" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27901" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27758" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27875" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27697" -uroot -p"mysql root的密?;
"kill 27888" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27861" -uroot -p"mysql root的密?;
如果认没有问题了,把最后的cat修改为sh卛_。本人改写了下上面的脚本Q?br />#!/bin/bash
mysql_pwd="密码"
mysql_exec="/usr/local/mysql/bin/mysql"
mysql_timeout_dir="/tmp"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
"$mysql_timeout_dir/mysql_kill_timeout.log"
$mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" >> $mysql_kill_timeout_log
for line in `$mysql_kill_timeout_log | awk '{print $1}'`
do
echo "$mysql_exec -uroot -p$mysql_pwd -e /"kill $line/"" >> $mysql_kill_timeout_sh
done
cat $mysql_kill_timeout_sh
很多时候!一不小心就锁表Q这里讲解决锁表l极ҎQ?br />
案例一
mysql>showprocesslist;
参看sql语句Q一般少的话
mysql>killthread_id;
可以解决了Qkill掉第一个锁表的q程Q?依然没有改善Q既然不改善Q咱们就惛_法将所有锁表的q程kill掉吧Q简单的脚本如下Q?br />#!/bin/bash
mysql-uroot-e"show processlist"|grep-i"Locked">>locked_log.txt
forlinein`cat locked_log.txt | awk '{print$1}'`
do
echo"kill$line;">>kill_thread_id.sql
done
现在kill_thread_id.sql的内容像q个样子
kill66402982;
kill66402983;
kill66402986;
kill66402991;
.....
好了Q我们在mysql的shell中执行,可以把所有锁表的q程杀M?br />mysql>sourcekill_thread_id.sql
当然了,也可以一行搞定?br />foridin`mysqladmin processlist | grep -i locked | awk '{print$1}'`
do
mysqladminkill${id}
done
案例?br />
如果大批量的操作能够通过一pd的select语句产生Q那么理Zp对这些结果批量处理。但是mysqlq没用提供evalq样的对l果集进行分析操作的功能。所以只能现selectl果保存C时文件中Q然后再执行临时文g中的指o。具体过E如下:
mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='root';
+------------------------+
| concat('KILL ',id,';')
+------------------------+
| KILL 3101;
| KILL 2946;
+------------------------+
2 rows IN SET (0.00 sec)
mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='root' INTO OUTFILE '/tmp/a.txt';
Query OK, 2 rows affected (0.00 sec)
mysql> source /tmp/a.txt;
Query OK, 0 rows affected (0.00 sec)
案例?br />
MySQL + PHP的模式在大ƈ发压力下l常会导致MySQL中存在大量僵死进E,D服务挂死。ؓ了自动干掉这些进E,弄了个脚本,攑֜服务器后台通过crontab自动执行。发现这样做了以后,的确很好的缓解了q个问题。把q个脚本发出来和大家Share。根据自q实际需要,做了一些修改:
SHELL脚本:mysqld_kill_sleep.sh
#!/bin/sh
mysql_pwd="root的密?
mysqladmin_exec="/usr/local/bin/mysqladmin"
mysql_exec="/usr/local/bin/mysql"
mysql_timeout_dir="/tmp"
mysql_timeout_log="$mysql_timeout_dir/mysql_timeout.log"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
mysql_kill_timeout_log="$mysql_timeout_dir/mysql_kill_timeout.log"
$mysqladmin_exec -uroot -p"$mysql_pwd" processlist | awk '{ print $12 , $2 ,$4}' | grep -v Time | grep -v '|' | sort -rn > $mysql_timeout_log
awk '{if($1>30 && $3!="root") print "'""$mysql_exec""' -e " "\"" "kill",$2 "\"" " -uroot " "-p""\"""'""$mysql_pwd""'""\"" ";" }' $mysql_timeout_log > $mysql_kill_timeout_sh
echo "check start ...." >> $mysql_kill_timeout_log
echo `date` >> $mysql_kill_timeout_log
cat $mysql_kill_timeout_sh
把这个写到mysqld_kill_sleep.sh。然后chmod 0 mysqld_kill_sleep.sh,chmod u+rx mysqld_kill_sleep.shQ然后用root账户到cron里面q行卛_Q时间自p整。执行之后显C:
www# ./mysqld_kill_sleep.sh
/usr/local/bin/mysql -e "kill 27549" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27750" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27840" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27867" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27899" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27901" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27758" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27875" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27697" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27888" -uroot -p"mysql root的密?;
/usr/local/bin/mysql -e "kill 27861" -uroot -p"mysql root的密?;
如果认没有问题了,把最后的cat修改为sh卛_。本人改写了下上面的脚本Q?br />#!/bin/bash
mysql_pwd="密码"
mysql_exec="/usr/local/mysql/bin/mysql"
mysql_timeout_dir="/tmp"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
mysql_kill_timeout_log="$mysql_timeout_dir/mysql_kill_timeout.log"
$mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" >> $mysql_kill_timeout_log
chmod 777 $mysql_kill_timeout_log
for line in `$mysql_kill_timeout_log | awk '{print $1}'`
do
echo "$mysql_exec -uroot -p$mysql_pwd -e \"kill $line\"" >> $mysql_kill_timeout_sh
done
chmod 777 $mysql_kill_timeout_sh
cat $mysql_kill_timeout_sh
是不是很方便呢!processlist命o的输出结果显CZ有哪些线E在q行Q可以帮助识别出有问题的查询语句Q两U方式用这个命令?br />1、进入mysql/bin目录下输入mysqladmin processlist;
2、启动mysqlQ输入show processlist;
如果有SUPER权限Q则可以看到全部的线E,否则Q只能看到自己发LU程Q这是指Q当前对应的MySQL帐户q行的线E)。得到数据Ş式如下(只截取了三条Q:
mysql> show processlist;
+-----+-------------+--------------------+-------+---------+-------+----------------------------------+----------
| Id | User | Host | db | Command | Time| State | Info
+-----+-------------+--------------------+-------+---------+-------+----------------------------------+----------
|207|root |192.168.0.20:51718 |mytest | Sleep | 5 | | NULL
|208|root |192.168.0.20:51719 |mytest | Sleep | 5 | | NULL
|220|root |192.168.0.20:51731 |mytest |Query | 84 | Locked |
select bookname,culture,value,type from book where id=001
先简单说一下各列的含义和用途,W一列,idQ不用说了吧Q一个标识,你要kill一个语句的时候很有用。user列,昄单前用户Q如果不是rootQ这个命令就只显CZ权限范围内的sql语句。host列,昄q个语句是从哪个ip的哪个端口上发出的。呵呵,可以用来q踪出问题语句的用户。db列,昄q个q程目前q接的是哪个数据库。command列,昄当前q接的执行的命oQ一般就是休眠(sleepQ,查询QqueryQ,q接QconnectQ。time列,此这个状态持l的旉Q单位是U。state列,昄使用当前q接的sql语句的状态,很重要的列,后箋会有所有的状态的描述Q请注意Qstate只是语句执行中的某一个状态,一个sql语句Q已查询ZQ可能需要经qcopying to tmp tableQSorting resultQSending data{状态才可以完成Qinfo列,昄q个sql语句Q因为长度有限,所以长的sql语句显CZ全,但是一个判断问题语句的重要依据?br />
q个命o中最关键的就是state列,mysql列出的状态主要有以下几种Q?br />Checking table
正在查数据表Q这是自动的Q?br />Closing tables
正在表中修改的数据h到磁盘中Q同时正在关闭已l用完的表。这是一个很快的操作Q如果不是这L话,应该确认磁盘空间是否已l满了或者磁盘是否正处于重负中?br />Connect Out
复制从服务器正在q接L务器?br />Copying to tmp table on disk
׃临时l果集大于tmp_table_sizeQ正在将临时表从内存存储转ؓ盘存储以此节省内存?br />Creating tmp table
正在创徏临时表以存放部分查询l果?br />deleting from main table
服务器正在执行多表删除中的第一部分Q刚删除W一个表?br />deleting from reference tables
服务器正在执行多表删除中的第二部分,正在删除其他表的记录?br />Flushing tables
正在执行FLUSH TABLESQ等待其他线E关闭数据表?br />Killed
发送了一个killhl某U程Q那么这个线E将会检查kill标志位,同时会放弃下一个killh。MySQL会在每次的主循环中检查kill标志位,不过有些情况下该U程可能会过一段才能L。如果该U程E被其他U程锁住了,那么killh会在锁释放时马上生效?br />Locked
被其他查询锁住了?br />Sending data
正在处理Select查询的记录,同时正在把结果发送给客户端?br />Sorting for group
正在为GROUP BY做排序?br />Sorting for order
正在为ORDER BY做排序?br />Opening tables
q个q程应该会很快,除非受到其他因素的干扰。例如,在执Alter TABLE或LOCK TABLE语句行完以前Q数据表无法被其他线E打开。正试打开一个表?br />Removing duplicates
正在执行一个Select DISTINCT方式的查询,但是MySQL无法在前一个阶D优化掉那些重复的记录。因此,MySQL需要再ơ去掉重复的记录Q然后再把结果发送给客户端?br />Reopen table
获得了对一个表的锁Q但是必d表结构修改之后才能获得这个锁。已l释NQ关闭数据表Q正试重新打开数据表?br />Repair by sorting
修复指o正在排序以创建烦引?br />Repair with keycache
修复指o正在利用索引~存一个一个地创徏新烦引。它会比Repair by sorting慢些?br />Searching rows for update
正在讲符合条件的记录扑և来以备更新。它必须在Update要修改相关的记录之前完成了?br />Sleeping
正在{待客户端发送新h.
System lock
正在{待取得一个外部的pȝ锁。如果当前没有运行多个mysqld服务器同时请求同一个表Q那么可以通过增加--skip-external-locking参数来禁止外部系l锁?br />Upgrading lock
Insert DELAYED正在试取得一个锁表以插入新记录?br />Updating
正在搜烦匚w的记录,q且修改它们?br />User Lock
正在{待GET_LOCK()?br />Waiting for tables
该线E得到通知Q数据表l构已经被修改了Q需要重新打开数据表以取得新的l构。然后,Z能的重新打开数据表,必须{到所有其他线E关闭这个表。以下几U情况下会生这个通知Q?br />FLUSH TABLES tbl_name, Alter TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE,或OPTIMIZE TABLE?br />
waiting for handler insert
Insert DELAYED已经处理完了所有待处理的插入操作,正在{待新的h。大部分状态对应很快的操作Q只要有一个线E保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下?br />
q有其他的状态没在上面中列出来,不过它们大部分只是在查看服务器是否有存在错误是才用得着?/div>
]]>
1.新徏用户?/strong>
//dMYSQL
@>mysql -u root -p
@>密码
//创徏用户
mysql> mysql> insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub
ject) values("localhost","pppadmin",password("passwd"),'','','');
q样创Z一个名为:phplamp 密码为:1234 的用戗?
然后d一下?
mysql>exit;
@>mysql -u phplamp -p
@>输入密码
mysql>d成功
2.为用h权?/strong>
//dMYSQLQ有ROOT权限Q。我里我以ROOTw䆾d.
@>mysql -u root -p
@>密码
//首先为用户创Z个数据库(phplampDB)
mysql>create database phplampDB;
//授权phplamp用户拥有phplamp数据库的所有权限?
>grant all privileges on phplampDB.* to phplamp@localhost identified by '1234';
//hpȝ权限?
mysql>flush privileges;
mysql>其它操作
/*
如果x定部分权限给一用户Q可以这h?
mysql>grant select,update on phplampDB.* to phplamp@localhost identified by '1234';
//hpȝ权限表?
mysql>flush privileges;
*/
3.删除用户?/strong>
@>mysql -u root -p
@>密码
mysql>Delete FROM user Where User="phplamp" and Host="localhost";
mysql>flush privileges;
//删除用户的数据库
mysql>drop database phplampDB;
4.修改指定用户密码?/strong>
@>mysql -u root -p
@>密码
mysql>update mysql.user set password=password('新密?) where User="phplamp" and Host="localhost";
mysql>flush privileges;
5.列出所有数据库
mysql>show database;
6.切换数据?/strong>
mysql>use '数据库名';
7.列出所有表
mysql>show tables;
8.昄数据表结?/strong>
mysql>describe 表名;
9.删除数据库和数据?
mysql>drop database 数据库名;
mysql>drop table 数据表名;
]]>
javax.persistence.*
包下面的 GeneratedValue
?code>SequenceGenerator?code>TableGenerator三个注释来描q实体的标识字段?/p>
GeneratedValue
注释和相应的参数QOpenJPA 框架会根据注释和参数来处理实体标识的自动生成?/p>
GeneratedValue
注释自动生成的实体标识可以是数值类型字D如 byte
?code>short?code>int?code>long{,或者它们对应的包装器类?Byte
?code>Short?code>Integer?code>Long{,也可以是字符串类型?/p>
GeneratedValue
注释可以支持两个属?strategy
?generator
?/p>
strategy
strategy
?GenerationType
cd的枚丑ր|它的内容指?OpenJPA 容器自动生成实体标识的方式?code>strategy属性可以是下列枚D|
GeneratorType.AUTO
GenerationType.IDENTITY
GenerationType.SEQUENCE
GenerationType.TABLE
String generator
generator
属性中定义实体标识生成器的名称。如果实体的标识自动生成{略不是 GenerationType.AUTO
或?GenerationType.IDENTITY
Q就需要提供相应的 SequenceGenerator
或?TableGenerator
注释Q然后将 generator
属性D|ؓ注释?name
属性倹{?/p>
GenerationType.SEQUENCE
Q开发者需要ؓ实体标识字段提供 SequenceGenerator
注释Q它的参数描qC使用序列L成实体标识的具体l节。该注释支持以下四个属性:
?1. SequenceGenerator 注释属性说?/strong>
属?/th>
说明
name
该属性是必须讄的属性,它表CZ SequenceGenerator
注释?OpenJPA 容器中的唯一名称Q将会被 GeneratedValue
注释?generator
属性用。将实体标识的自动生成委托给数据库的序列L性时Q实体标识字D늚 GeneratedValue
注释?generator
属性的值必d某个 SequenceGenerator
注释?name
属性g持一致?/td>
sequenceName
实体标识所使用的数据库序列L名称。该属性是可选的Q如果我们没有ؓ该属性设||OpenJPA 框架自动创建名? OPENJPA_SEQUENCE
的序列号。如果一?OpenJPA 容器中管理的多个实体都选择使用序列h制生成实体标识,而且实体cM都没有指定标识字D늚 sequenceName
属性,那么q些实体会׃npȝ提供的默认名?OPENJPA_SEQUENCE
的序列号。这可能引v实体cȝL不连l。我们可以用下面的这个简单例子说明这U情况:假设 OpenJPA 容器中存在两个实体类 Dog ?FishQ它们的实体标识字段都是数值型Qƈ且都选择使用序列L成实体标识,但是实体cMq没有提?sequenceName
属性倹{当我们首先持久化一?Dog 对象Ӟ它的实体标识会?1Q紧接着我们持久化一?Fish 对象Q它的实体标识就?2Q依ơ类推?/td>
initialValue
该属性设|所使用序列L起始倹{?/td>
allocationSize
一些数据库的序列化机制允许预先分配序列P比如 OracleQ这U预先分配机制可以一ơ性生成多个序列号Q然后放?cache 中,数据库用戯取的序列h从序列号 cache 中获取的Q这样就避免了在每一ơ数据库用户获取序列L时候都要重新生成序列号?code>allocationSize属性设|的是一ơ预先分配序列号的数目,默认情况? allocationSize
属性的值是 50?/td>
?2. TableGenerator 注释属性说?/strong>
属?/th>
说明
name
该属性是必须讄的属性,它表CZ TableGenerator
注释?OpenJPA 容器中的唯一名称Q将会被 GeneratedValue
注释?generator
属性所使用。将实体标识的自动生成委托给数据库表Ӟ实体标识字段?GeneratedValue
注释?generator
属性的值必d某个 TableGenerator
注释?name
属性g持一致?/td>
table
该属性设|的是生成序列号的表的名U。该属性ƈ不是必须讄的属性,如果开发者没有ؓ该属性设||OpenJPA 容器会使用默认的表? OPENJPA_SEQUENCES_TABLE
?/td>
schema
该属性设|的是生成序列号的表?schema。该属性ƈ不是必须讄的属性,如果开发者没有ؓ该属性设||OpenJPA 容器会默认使用当前数据库用户对应的 schema?/td>
catalog
该属性设|的是生成序列号的表?catalog。该属性ƈ不是必须讄的属性,如果开发者没有ؓ该属性设||OpenJPA 容器会使用默认当前数据库用户对应的 catalog?/td>
pkColumnName
该属性设|的是生成序列号的表中的主键字段的名Uͼ该字D将保存代表每个实体对应的标识值对应的特征字符丌Ӏ该属性ƈ不是必须讄的属性,如果开发者没有ؓ该属性设||OpenJPA 容器会使用默认? ID
?/td>
valueColumnName
该属性设|的是生成序列号的表中记录实体对应标识最大值的字段的名U。该属性ƈ不是必须讄的属性,如果开发者没有ؓ?属性设||OpenJPA 容器会使用默认? SEQUENCE_VALUE
?/td>
pkColumnValue
该属性设|的是生成序列号的表中的主键字段的特征字W串?( 比如 customID )Q该字段保存代表每个实体对应的标识值对应的特征字符丌Ӏ该属性ƈ不是必须讄的属性,如果开发者没有ؓ该属性设||OpenJPA 容器会使用默认? DEFAULT
。可以ؓ多个实体讄相同?pkColumnValue
属性|q些实体标识的生成将通过同一列的值的递增来实现?/td>
initialValue
该属性设|的是生成序列号的表实体标识的初始倹{该属性ƈ不是必须讄的属性,如果开发者没有ؓ该属性设||OpenJPA 容器会使用默认?0 ?/td>
allocationSize
Z降低标识生成旉J操作数据库造成 的性能上的影响Q实体标识生成的时候会一ơ性的获取多个实体标识Q该属性设|的是一ơ性获取实体标识的数目。该属性ƈ不是必须讄的属性,如果开发者没有ؓ该属性设||OpenJPA 容器会使用默认?50 ?/td>
Animal
实体需要被持久化,它包?ID
?NAME
属性,其中 ID
是它的主键字Dc?code>Animal实体的标识需要自动生成,我们分析在q四U不用的情况下,如何使用 OpenJPA 提供的注释,l合具体数据库支持的Ҏ,如自增长字段、序列号{来实现实体标识的自动生成?/p>
OPENJPA_SEQUENCE_TABLE
Q用其中?SEQUENCE_VALUE
字段来记录实体的实体标识的增ѝ?/p>
OPENJPA_SEQUENCE_TABLE
。它有两个字D:ID
?SEQUENCE_VALUE
Q这两个字段都是数值类型,其中 ID
是表的主键字D,它的内容是查询当前实体标识时所使用的关键词Q默认值是 0。?SEQUENCE_VALUE
记录了当?OpenJPA 框架中当前实体标识的历史数据Q内Ҏ已经被获取实体标识的最大数值加 1?/p>
Animal
实体的标识由容器自动生成Q只需要ؓ它的标识字段提供 GeneratedValue
注释Qƈ且把它的 strategy
属性设|ؓ GenerationType.AUTO
, Animal
实体cȝ代码片断如下Q?/p>
清单 1. 标识由容器自动生成的 Animal 实体c?/strong>
1. import javax.persistence.Entity;
2. import javax.persistence.GeneratedValue;
3. import javax.persistence.GenerationType;
4. import javax.persistence.Id;
5.
6. @Entity
7. public class Animal {
8. @Id
9. @GeneratedValue(strategy=GenerationType.AUTO)
10. private long id;
11. private String name;
12.
13. …
14.
15. }
Animal
实体的第一个实例时QOpenJPA 框架自动调用 SQL 语句 SELECT SEQUENCE_VALUE FROM OPENJPA_SEQUENCE_TABLE WHERE ID=0
Q从默认保存实体标识?OPENJPA_SEQUENCE_TABLE
表中获取实体的标识,如果不存?ID
?0 的记录,OpenJPA 框架自动实体的标识讄?1?/p>
OPENJPA_SEQUENCE_TABLE
表的 SEQUENCE_VALUE
的D|ؓ 51Q当 OpenJPA 多次从数据库中获取实体标识后Q?code>SEQUENCE_VALUE的g?50 为单位递增Q变?101?51?01 …?/p>
EntityManagerFactory
理范围内v作用Q也是_当获取实体标识的 EntityManagerFactory
对象被关闭后Q这些被获取的实体标识中没有用掉的那一部分标识׃׃Q这会造成实体标识的不q箋。由同一?EntityManagerFactory
对象创徏?EntityManager
上下文之间则能够׃n OpenJPA 框架获取的实体标识,q意味着Q我们可以用同一?EntityManagerFactory
对象创徏多个 EntityManager
对象Q用它来持久化实体,然后关闭它,在持久化q程中所需要的实体表示会使用同一个实体标识的~存区,因此不会引v实体标识的丢失?/p>
Dog
?Fish
Q它们的实体标识字段都是数值型Qƈ且都?OpenJPA 理。当我们首先持久化一?Dog
对象Ӟ它的实体标识会?1Q紧接着我们持久化一?Fish
对象Q它的实体标识就?2Q依ơ类推?/p>
GeneratedValue
注释?strategy
属性设|ؓ GenarationType.AUTO
Q然后将 GeneratedValue
注释?generator
属性设|ؓ uuid-string
。以 Animal 实体cMؓ例,我们只需要将 Animal 实体修改为如下内容:
清单 2. 使用 uuid-string 机制自动生成实体标识
1. import javax.persistence.Entity;
2. import javax.persistence.GeneratedValue;
3. import javax.persistence.GenerationType;
4. import javax.persistence.Id;
5.
6. @Entity
7. public class Animal {
8. @Id
9. @GeneratedValue(strategy=GenerationType.AUTO, generator = "uuid-string")
10. private String id;
11. private String name;
12.
13. …
14.
15. }
GeneratedValue
注释?strategy
属性设|ؓ GenarationType.AUTO
Q然后将 GeneratedValue
注释?generator
属性设|ؓ uuid-hex
。以 Animal 实体cMؓ例,我们只需要将 Animal 实体修改为如下内容:
清单 3. 使用 uuid-hex 机制自动生成实体标识
1. import javax.persistence.Entity;
2. import javax.persistence.GeneratedValue;
3. import javax.persistence.GenerationType;
4. import javax.persistence.Id;
5.
6. @Entity
7. public class Animal {
8. @Id
9. @GeneratedValue(strategy=GenerationType.AUTO, generator = "uuid-hex")
10. private String id;
11. private String name;
12.
13. …
14.
15. }
GeneratedValue
注释?stragety
属性的D|ؓ GenerationType.IDENTITY
?/p>
ID
字段讄动增长类型:
清单 4. ?ID 字段讄动增长类型的 SQL 语句
CREATE TEXT TABLE ANIMAL (
ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
NAME VARCHAR(255) NOT NULL
)
Animal
的定义中Q我们需要将 id
字段 GeneratedValue
注释?stragety
属性的D|ؓ GenerationType.IDENTITY
。Animal 实体cM改后的代码片D如下?/p>
清单 5. 标识p增长字段生成?Animal 实体c?/strong>
1. import javax.persistence.Entity;
2. import javax.persistence.GeneratedValue;
3. import javax.persistence.GenerationType;
4. import javax.persistence.Id;
5.
6. @Entity
7. public class Animal {
8. @Id
9. @GeneratedValue(strategy=GenerationType.IDENTITY)
10. private long id;
11. private String name;
12.
13. …
14.
15. }
SequenceGenerator
注释Q设|它的参敎ͼ为实体类提供关于序列L信息Q同时将实体cM实体标识字段?GeneratedValue
注释?stragety
属性的D|ؓ GenerationType.SEQUENCE
Q将 generator
属性的D|ؓ SequenceGenerator
注释?name
属性的倹{?/p>
HelloWorldSequence
的序列号Q序列号支持 cacheQ大ؓ 50Q?/p>
清单 6. 创徏序列L SQL 语句
CREATE SEQUENCE HELLOWORLDSEQUENCE
START WITH 0
INCREMENT BY 1
MINVALUE 1
CACHE 50
NOCYCLE
NOORDER
ANIMAL
表:
清单 7. 创徏 ANIMAL ?/strong>
CREATE TABLE EOS52.ANIMAL
(
ID CHAR(10),
NAME VARCHAR2(100) NOT NULL,
CONSTRAINT PK_ANIMAL PRIMARY KEY (ID )
)
Animal
的定义中Q我们需要将 id
字段 GeneratedValue
注释?stragety
属性的D|ؓ GenerationType.SEQUENCE
Q设|它?generator
属性的gؓ SeqGenerator
。我们还需要ؓ id
字段提供另外一个相关的注释 SequenceGenerator
Q设|它?name
属性ؓ SeqGenerator
Q设|它 sequenceName
属性ؓ HelloWorldSequence
。Animal 实体cM改后的代码片D如下?/p>
清单 8. 标识由序列号生成?Animal 实体c?/strong>
1. import javax.persistence.Entity;
2. import javax.persistence.GeneratedValue;
3. import javax.persistence.GenerationType;
4. import javax.persistence.Id;
5.
6. @Entity
7. public class Animal {
8. @Id
9. @GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "SeqGenerator")
10. @SequenceGenerator(name = "SeqGenerator",
sequenceName = " HelloWorldSequence")
11. private long id;
12. private String name;
13.
14. …
15.
16. }
ID
) 记录实体~号的特征字W串 ( 假设存在一条记录的 ID
?customID
)Q另外一?( 假设列名?SEQUENCE_VALUE
) 记录该特征字W串对应实体标识的最大倹{编写实体代码时Q我们指定实体标识由数据库表中指定的特征字符?( ?customID
) 对应的列 SEQUENCE_VALUE
处理Q当有新的实体被持久化时Q容器将获取?customID
、列 SEQUENCE_VALUE
对应的数?+1 后作为新实体的标识,同时该列的g自动 +1?/p>
TableGenerator
注释Q设|它的参敎ͼ为实体类提供关于数据库表、字D늚信息Q同时将实体cM实体标识字段?GeneratedValue
注释?stragety
属性的D|ؓ GenerationType.Table
Q将 generator
属性的D|ؓ SequenceGenerator
注释?name
属性的倹{?/p>
MY_KEYS
自动生成Q?code>MY_KEYS表中有两列,一列是 KEYID
Q它保存实体标识的特征|一列是 KEYVALUE
Q它保存实体当前的最大编P除此之外Q我们还军_使用 ANIMALID
作ؓ Animal 实体标识的特征字W串?/p>
MY_KEYS
的数据库表。在 OpenJPA 容器中,如果我们没有创徏 MY_KEYS
表,OpenJPA 容器帮我们自动生成对应的表l构?/p>
清单 9. 创徏数据库表 MY_KEYS
CREATE TABLE MY_KEYS (
KEYID VARCHAR(255) NOT NULL,
KEYVALUE BIGINT,
PRIMARY KEY (KEYID)
)
id
字段 GeneratedValue
注释?stragety
属性的D|ؓ GenerationType.TABLE
Q设|它?generator
属性的gؓ TableGenerator
。我们还需要ؓ id
字段提供另外一个注?TableGenerator
Q设|它?name
属性ؓ TableGenerator
Q设|它?table
属性ؓ MYKEYS
?code>pkColumnName属性ؓ KEYID
?code>valueColumnName属性ؓ KEYVALUE
?ANIMALID
属性ؓ ANIMALID
。Animal 实体cM改后的代码片D如下?/p>
清单 10. 标识由数据库表生成的 Animal 实体c?/strong>
1. import javax.persistence.Entity;
2. import javax.persistence.GeneratedValue;
3. import javax.persistence.GenerationType;
4. import javax.persistence.Id;
5.
6. @Entity
7. public class Animal {
8. @Id
9. @GeneratedValue(strategy = GenerationType.TABLE,
generator = " TableGenerator ")
10. @TableGenerator(name = " TableGenerator", table = "MY_KEYS",
pkColumnName = "KEYID", valueColumnName = "KEYVALUE",
pkColumnValue = "ANIMALID")
11. private long id;
12. private String name;
13.
14. …
15.
16. }
name
的值即可。下面的代码演示?Animal 实例的持久化代码Q请注意代码中ƈ没有调用 Animal 实例?setId Ҏ?/p>
清单 11. Animal 实例的持久化代码
1. EntityManagerFactory factory = Persistence.
2. createEntityManagerFactory(
3. "jpa-unit", System.getProperties());
4. EntityManager em = factory.createEntityManager();
5. em.getTransaction().begin();
6.
7. Animal animal = new Animal();
8. // 此处不需要调?animal ?setId Ҏ
9. animal.setName("ba guai!");
10. em.persist(animal);
11.
12. em.getTransaction().commit();
13. em.close();
14. em2.close();
15. factory.close();
http://www.ibm.com/developerworks/cn/java/j-lo-openjpa5/
database configuration assistant Q按照向导去创徏SIDQ当日利用database configuration assistant q可?创徏数据库、配|数据选g、删除数据库、管理模ѝ配|自动存储管理?/p>
2Q?/strong>oracle中服务的创徏Q?/strong>在oracle实例创徏完后Q就可以创徏服务名了。注意:q接一个实例可以有多个服务名。启?配置和移植工具中的net managerQ网l配|)Q按照向导开始配|?|络服务?=》TCP/IP协议==》主机名Q服务端的IP地址Q?=》oracle8i或更高版?服务名(即SID实例名称Q?=》测?==》完成?/p>
3Q?/strong>框架中db.properties的配|: datasource.driverClassName=oracle.jdbc.OracleDriver c3p0.minPoolSize=1 .tar.bz2 解压Qtar jxvf FileName.tar.bz2 压羃Qtar jcvf FileName.tar.bz2 DirName .gz .rpm 从远Escp到本圎ͼ scp root@192.168.2.100:/opt/test/* /opt/test Q输?/span>q程机器密码后完?/span> scp -P 3588 root@192.168.2.100:/opt/test/* /opt/test 走特D端口号 scp /opt/test/* root@192.168.2.100:/opt/test Q输?/span>q程机器密码后完?/span> 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 使用方式 :chown jessie:users file1.txt Mysql 初始化:chkconfig –add mysqld 正在使用的端口:netstat -ant 挂蝲USBQ?mount /dev/sdc /mnt/usb Rpm 安装Q?rpm –ivh filename www服务配置Q?etc/httpd/conf/httpd.conf |络试Qcurl -I http://www.job5156.com 改IP地址Qifconfig eth0 192.168.2.29 netmask 255.255.255.0 改网养Iroute add default gw 192.168.2.254 查看Qroute –n 改DNSQnano -w /etc/resolv.conf 导入表结构:mysql dbName < name.sql 修复Mysql表: mysqlrepair --auto-repair -F -r dbName tableName lmysql用户加̎h限: grant all on dbName.* to user@'%' identified by 'pwd'; FLUSH PRIVILEGES; 加字D:ALTER TABLE table_name ADD field_name field_type; 删字D:alter table t2 drop column c; 字段重命名:alter table t1 change a b integer; 表重命名Qalter table t1 rename t2; 加烦引:alter table tablename add index 索引?(字段?[Q字D名2 …]); 删烦引:alter table tablename drop index emp_name; MySQL对于字符集的指定可以l化C个数据库Q一张表Q一列,应该用什么字W集?/p>
但是Q传l的E序在创建数据库和数据表时ƈ没有使用那么复杂的配|,它们用的是默认的配置Q那么,默认的配|从何而来呢? 单的ȝ一下,如果什么地斚w不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储Q不q我们如果安?MySQLQ一般都会选择多语a支持Q也是_安装E序会自动在配置文g中把 default_character_set 讄?UTF-8Q这保证了缺省情况下Q所有的数据库的所有表的所有栏位的都用 UTF-8 存储?/p>
SET NAMES 'utf8';
datasource.url=jdbc:oracle:thin:@//127.0.0.1:1521/ORCL Q注意,q个orcl是指第二项 oracle中服务的创徏Q?/strong>
datasource.username=card
datasource.password=1111
c3p0.maxPoolSize=30
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
hibernate.jdbc.batch_size=25
hibernate.jdbc.fetch_size=50
hibernate.show_sql=true
]]>
exists file float for from grant group having identified immediate in increment index initial
insert integer intersect into is level like lock long maxextents minus mlslabel mode modify
noaudit nocompress not nowait null number of offline on online option or order pctfree prior
privileges public raw rename resource revoke row rowid rownum rows select session set
share size smallint start successful synonym sysdate table then to trigger uid union unique
update user validate values varchar varchar2 view whenever where with
]]>
解压1Qgunzip FileName.gz 解压2Qgzip -d FileName.gz 压羃Qgzip FileName
.tar.gz ?.tgz
解压Qtar zxvf FileName.tar.gz 压羃Qtar zcvf FileName.tar.gz DirName
解包Q?/span>rpm2cpio FileName.rpm | cpio -div
.deb
解包Q?/span>ar p FileName.deb data.tar.gz | tar zxf -
从本地scp到远E:
导出表结构:mysqldump -u root -p -d --add-drop-table dbName tableName > /opt/name.sql
]]>
]]>
MySQL的字W集支持(Character Set Support)有两个方面:
字符?Character set)和排序方?Collation)?br />
对于字符集的支持l化到四个层?
服务?server)Q数据库(database)Q数据表(table)和连?connection)?br />
1.MySQL默认字符?
(6)在这个数据库里创Z张表Ӟ表默认的字符集被讑֮?character_set_databaseQ也是q个数据库默认的字符集;
(7)当在表内讄一栏时Q除非明指定,否则此栏~省的字W集是表默认的字符集;
2.查看默认字符?默认情况下,mysql的字W集是latin1(ISO_8859_1)
通常Q查看系l的字符集和排序方式的设定可以通过下面的两条命令:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3.修改默认字符?br />
(1) 最单的修改ҎQ就是修改mysql的my.ini文g中的字符集键|
? default-character-set = utf8
character_set_server = utf8
修改完后Q重启mysql的服务,service mysql restart
使用 mysql> SHOW VARIABLES LIKE 'character%';查看Q发现数据库~码均已Ҏutf8
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+
(2) q有一U修改字W集的方法,是使用mysql的命?br />
mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;
一般就设|了表的默认字符集ؓutf8q且通过UTF-8~码发送查询,你会发现存入数据库的仍然是ؕ码。问题就出在q个connectionq接层上。解x法是在发送查询前执行一下下面这句:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
ȝ:
因此Q用什么数据库版本Q不是3.xQ还?.0.xq是4.1.xQ其实对我们来说不重要,重要的有二:
1) 正确的设定数据库~码.MySQL4.0以下版本的字W集L默认ISO8859-1QMySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8Q那么在创徏数据库的时候就要指定好UTF-8(创徏好以后也可以改,4.1以上版本q可以单独指定表的字W集)
2) 正确的设定数据库connection~码.讄好数据库的编码后Q在q接数据库时候,应该指定connection的编码,比如使用jdbcq接Ӟ指定q接为utf8方式.
参?"关中刀? ?nbsp; <Mysql~码问题>Q原文地址http://lixiang.cn/?q=node/98
]]>
]]>
]]>
]]>
]]>