人有欺之,却不自欺

小九:“真跳下去,我也没有把握不会受伤,况且我不能用这种方式证明自己有种,那不过是证明了我是个傻子。他们显然是在欺负我,难道我还要欺负自己吗?若如其所愿,便是其帮凶,没有道理帮着欺负我的人去欺负自己。”

人有欺之,却不自欺,这倒是不错。

世人往往不懂强弱之道,自在之强,看似柔弱。所谓勇者,有勇于敢,亦有勇于不敢,而勇于不敢往往更难。明白这个道理并不容易,你能喊出那一句实不简单。

莫说你有功夫可以跳下去,也可以打得过他们,若是你没有功夫在身,也打不过他们,那是更不能跳了。因为你根本不该这么做、也不能这么做,哪怕受辱骂嘲笑,亦能不跳,则是大勇。

当然有,万事万物都在大道之中。若行止自然,就不必刻意去讲。

来源:徐公子<<太上章>>

dedecms经常出现mysql”连接数据库失败,可能数据库密码不对”解决方案

DEDE 5.5 版本经常出理以下错误

Error page: /dede/xxx

Error infos: DedeCms错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错

是随机出现并不是一直就这样,这样就可以排除是MYSQL用户名密码设置的问题了。

在网上找了一下基本上可以肯定就是 微软 KB967723 这个补丁所引起来了。

第一种方案

删除 KB967723  补丁 这个不建议大家操作,会引起网络断掉并无法链网的情况。

那我们就用微软件推荐的第二种方案吧

本方法是微软给出的修改注册表修复该Bug的的方法,原因是默认最大的临时 TCP 端口的数是 5000 适用于一节中包含的产品中。 在这些产品中添加一个新参数。 要提高临时端口的上限,请按照下列步骤操作:

1.启动注册表编辑器。
2.在的注册表中找到以下子项,然后单击 参数 :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3.在 编辑 菜单上单击 新建 ,,,然后添加下面的注册表项:
数值名称: MaxUserPort
值类型: DWORD
值数据: 65534
有效范围: 5000-65534 (十进制)
默认值: 0x1388 (5000 十进制)
说明: 此参数将控制程序从系统

微软官方关于这个补丁的说明:  http://support.microsoft.com/kb/q196271

当您试图从大于 5000 的 TCP 端口连接时收到错误 WSAENOBUFS (10055)

建议大家和我们下面导出来的注册表,导进去就可以了

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"MaxUserPort"=dword:0000fffe

把上面的内存COPY起来 复制到记录本中,保存为 .reg 再双击导入就OK了

不过记得重启一下电脑。

Win下MYSQL主从数据库同步设置实现数据同步更新

系统的需要实时备份,但是之前考虑的webservice备份数据的方法,对程序运行的效率有较大影响。查阅资料后发现,可以设定主从服务器来达到数据备份的目的。数据备份的任务全部交给mysql服务器完成,对团购系统的程序运行影响较少,并且可以达到实时备份的效果

系统的需要实时备份,但是之前考虑的webservice备份数据的方法,对程序运行的效率有较大影响。查阅资料后发现,可以设定主从服务器来达到数据备份的目的。数据备份的任务全部交给mysql服务器完成,对团购系统的程序运行影响较少,并且可以达到实时备份的效果。下面是mysql主从服务器设定的一些步骤(测试环境:主服务器是win2003,mysql版本 5.1.51;从服务器是win7, mysql版本是 5.1.51)。

1、 在主服务器上新增一个用于备份的用户,全局权限设定为RELOAD, SUPER, REPLICATION SLAVE。将要备份的数据库的全部权限分配给改用户,并且该用户可以远程登录主服务器。

2、 在主服务器的my.ini中的[mysqld]下面添加:

server-id=1 #主服务器id

log-bin=D:mysqllogmysql.log #备份

binlog-do-db=tg #备份数据库

3、 重启主服务器。

4、 设定从服务器,在从服务器的my.ini中的[mysqld]下面添加:

server-id=2 #必须与主服务器的id不一致

master-host=***.***.***.*** #主服务器ip

log-bin=D:mysqllogmysql.log

master-user=slave #主服务器上新增的用户名

master-password=123 #密码

master-port=3306 #主服务器端口

master-connect-retry=60 #同步时间间隔为60秒

5、 重启从服务器mysql。在主服务器mysql上运行SHOW MASTER STATUS 记录下File、Position字段值。启动从服务器mysql,运行一下命令:

change master to master_host=***.***.***.*** ;

change master to master_user= ‘slave’;

change master to master_password=123;

change master to master_log_file=mysql.000001 # 刚刚记录的File值

change master to master_log_pos=38392;#刚刚记录的position值,

然后运行 start slave;show slave status如果成功的话,可以返回一条与主服务器有关的数据,

这是回到主服务器上运行 show processlist 就可以查看到从服务器的连接状态。到此主从服务器的设定完成

How to set up mysql master/slave architecture.

来源:【原创】How to set up mysql master/slave architecture. (2008-12-10 09:55)

All the info below should be added in /etc/my.cnf. If you can’t find this file, just use the following statements to find where it is.

  1. To find the location of my.cnf.

ps aux | grep mysql | grep -v ‘grep’ | head -n 1

For example .

[root@localhost ~]# ps aux | grep mysql | grep -v ‘grep’ | head -n 1

root      2952  0.0  0.2   4512  1220 ?        S    16:12   0:00 /bin/sh ./mysqld_safe –defaults-file=/usr/local/mysql/my.cnf

Then we know the correct configuration file is /usr/local/mysql/my.cnf.

We should add the following lines to my.cnf in section [mysqld].

server-id = 1

log-bin=mysql-bin

binlog-do-db=db1

binlog-do-db=db2

binlog-ignore-db=ignore-db1

binlog-ignore-db=ignore-db2

expire_logs_days = 5

max_binlog_size=500M

log-slave-updates

Then restart mysqld manually and execute the following statements in mysql command line client.

  1. To grant valid user to slave.

To assume this thread called A.

grant file,replication slave on *.* to ‘mysql_ms’@’Slave IP’ identified by ‘Your password’;

flush privileges;

For example, if my slave’s ip address is "192.168.4.55". The user is "mysql_ms" and his password is "123456".

mysql> grant replication slave,file on *.* to ‘mysql_ms’@’192.168.4.55’ identified by ‘123456’;

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

Be sure to send the username and password to me.

  1. Lock tables and get the master’s binary log file and position.

flush tables with read lock;

show master status\G

You must not quit the current mysql command line client.

mysql> show master status\G

*************************** 1. row ***************************

            File: mysql-bin.000004

        Position: 595

Binlog_Do_DB: test

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

mysql>

Then send the results to me.

  1. Backup exact database.

Now we locked all the tables and got the exact binary log file and position in the previous step. So begin to backup the exact database right now.

Use mysqldump to dump the necessary data to flat file, then use tool named gzip or gzip2 to compress it.

For example, if your database name is db1 and your mysql installation path was added in the environment variable named "PATH".

Use the following statement to backup your databases’ data.

mysqldump -uroot -p –net_buffer_length=10M –max_allowed_packet=11M db1 > db1.txt

Here is my example in my machine, my database name is test.

[root@localhost ~]# /usr/local/mysql/bin/mysqldump -uroot -p –net_buffer_length=100M –max_allowed_packet=120M test > test.txt

To compress the flat text file to a gzip file, using the following command.

gzip db1.txt

Then the compressed file named db1.txt.gz will be generated. You should send this file to me.

After all the above completes, go to thread A and execute the following command.

unlock tables.

Then quit thread A.

  1. What the slave machine want.

User name and password.

Master’s IP address.(192.168.4.54)

Master’s  mysql port.(3308)

Master’s  mysql binary log file and position

Master’s backup data.

  1. The following is the slave configuration.

Add the my.cnf on slave machine and restart mysqld.

[mysqld]

server-id = 2

replicate-do-db=db1

replicate-do-db=db2

replicate-ignore-db=ignore-db1

replicate-ignore-db=ignore-db2

log-bin=slave-bin

  1. Get the master information on slave machine.

Then exit from it and use the following command to import from the backup file in the shell environment.

gzip gb1.txt.gz

mysql –uroot –p –S/tmp/mysql3307.sock < gb1.txt

Enter the mysql command line client.

set @@global.max_allowed_packet=11*1024*1024;

Then exit it and enter it again.

Change master to

master_host=’192.168.4.54’,

master_port=3308,

master_user=’mysql_ms’,

master_password=’123456’

master_log_file=’mysql-bin.000004’,

master_log_pos=595;

start slave;

MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。

在 SQL Server 中可以这样处理:

 if not exists (select 1 from t where id = 1) insert into t(id, update_time) values(1, getdate()) else update t set update_time = getdate() where id = 1

那么 MySQL 中如何实现这样的逻辑呢?别着急!MySQL 中有更简单的方法: replace into

replace into t(id, update_time) values(1, now());

replace into t(id, update_time) select 1, now();

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中,

1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。

2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

MySQL replace into 有三种形式:

1. replace into tbl_name(col_name, ...) values(...) 
2. replace into tbl_name(col_name, ...) select ... 
3. replace into tbl_name set col_name=value, ...

前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。

sqlserver 迁移到mysql详细步骤数据库表结构迁移

最近在开发的一个项目,需要从MS SQLServer迁移到MYSQL,以下把迁移过程记录下来,与大家共享!

sqlserver迁移到mysql 在数据库方面的工作主要是表的迁移,以及存储过程的迁移,这里先说说表的迁移.

首先先将MSSQL Server表结构导出为.sql文件. 表迁移,mysql一律不能运行带有[,],dbo.等带有sqlserver特征的脚步, 所以在导出的sqlserver脚步里面,首先要把这些字符全部过滤掉(可使用editplus进行过滤),在表创建方面的不支持的字符如下:[,],[dbo].,GO, on primary,.

在过滤完以上的字符后, 由于导出的sql文件都包含多个表, 为了能够一次性装载完所有的scripts并运行,需要在每个表的create语句后面加上分号, (同时还有加上ENGINE=InnoDB),否则你会发现只能一个一个表的进行运行,比如原来是这样:

CREATE TABLE bmapnamebidsg (
bword nvarchar (100) NOT NULL ,
bids text NULL ,
status int NOT NULL ,
cr_date datetime NOT NULL
)

CREATE TABLE BookStaticSortStatus (
sid int NOT NULL ,
sortStatus int NOT NULL ,
mxReviewStatus int NOT NULL ,
lReviewStatus int NOT NULL ,
up_date datetime NOT NULL
)

改动后是这样的:

CREATE TABLE bmapnamebidsg (
bword nvarchar (100) NOT NULL ,
bids text NULL ,
status int NOT NULL ,
cr_date datetime NOT NULL
)ENGINE=InnoDB ;

CREATE TABLE BookStaticSortStatus (
sid int NOT NULL ,
sortStatus int NOT NULL ,
mxReviewStatus int NOT NULL ,
lReviewStatus int NOT NULL ,
up_date datetime NOT NULL
)ENGINE=InnoDB ;

接下来就是数据类型了!

在数据类型方面,mysql基本对应了sqlserver的数据类型, 向bit,text,varchar,等,都对应得比较好, 但是,mysql并不支持smalldatetime(这个是sqlserver特有的),需要转成datetime,另外, sqlserver中的identity自增长属性在mysql中则表现为auto_increament属性,并且声明该属性的列必须是key!

最后我们看看主键,索引以及缺省值如何对应,一些是MS SQLServer(建一个主键,为两个字段定义缺省值,再为一个字段定义成索引):

ALTER TABLE BookStaticSortStatus WITH NOCHECK ADD
CONSTRAINT PK_BookStaticSortStatus PRIMARY KEY CLUSTERED
(
sid
)

ALTER TABLE BookStaticSortStatus ADD
CONSTRAINT DF_BookStaticSortStatus_status DEFAULT ((-1)) FOR sortStatus,
CONSTRAINT DF_BookStaticSortStatus_up_date DEFAULT (getdate()) FOR up_date

CREATE INDEX [sort2_books] ON [dbo].[books]([s2id]) ON [PRIMARY]

MySQL:

CREATE TABLE `bmapnamebidsg` (
`bword` varchar(100) character set utf8 NOT NULL default ‘1’,
`bids` text NOT NULL,
`status` int(11) NOT NULL,
`cr_date` datetime NOT NULL,
PRIMARY KEY (`bword`),
KEY `bids` (`bids`(1))
) ENGINE=InnoDB DEFAULT CHARSET=latin1

完成以上动作,表结构的迁移就基本完成了!

昙花一现只为韦陀

昙花又叫韦驮花。韦驮花很特别,总是选在黎明时分朝露初凝的那一刻才绽放, 
相传昙花和佛祖座下的韦驮尊者有一段哀怨缠绵的故事,所以昙花又叫韦驮花。 
传说昙花是一个花神,她每天都开花,四季都很灿烂,她爱上了一个每天为她锄 
草的小伙子,后来玉帝知道了这件事情,就大发雷霆,要拆散鸳鸯。玉帝把花神 
贬为一生只能开一瞬间的花,不让她再和情郎相见,还把那个小伙子送去灵柩山 
出家,赐名韦驮,让他忘记前尘,忘记花神。可是花神却忘不了那个年轻的小伙子, 
她知道每年暮春时分,韦驼尊者都会上山采春露,为佛祖煎茶,就选在那个时候 
开花!希望能见韦驮尊者一面,就一次,一次就够了!遗憾的是,春去春来, 
花开花谢,韦驮还是不认得她! 
昙花一现只为韦驮!