月度归档:2012 年十二月

php调用shell程序出现僵尸程序defunct

php调用bash shell
[php]
system("/home/app/clean_queue.sh", $retval);
[/php]

clean_queue.sh如下:
[bash]
#!/bin/bash
sid="/data/httpsqs/queue"
pid=`ps -ef|grep -v grep|grep $sid|sed -n ’1P’|awk ‘{print $2}’`
while [ -n "$pid" ]
do
echo "queue id=$pid"
kill $pid
pid=`ps -ef|grep -v grep|grep $sid|sed -n ’1P’|awk ‘{print $2}’`
done

echo "has shutdown queue."
rm -rf /data/httpsqs/queue/httpsqs.db
echo "has delete queue db."

/usr/bin/httpsqs -d -p 1234 -x /data/httpsqs/queue
echo "has restarted page queue"

pid2=`ps -ef|grep -v grep|grep $sid|sed -n ’1P’|awk ‘{print $2}’`
while [ -z "$pid2" ]
do
echo "queue has not been started, ready to retry."
/usr/bin/httpsqs -d -p 1234 -x /data/httpsqs/queue
pid2=`ps -ef|grep -v grep|grep $sid|sed -n ’1P’|awk ‘{print $2}’`
done
echo "end check if started"
[/bash]

但执行的时候此段php代码始终不结束
[bash]
[root@script ~]# ps -ef|grep defunct
root 11273 21369 0 16:58 pts/0 00:00:00 php test_defunct.php
root 11275 11273 0 16:58 pts/0 00:00:00 [sh] <defunct>
root 11384 13877 0 16:59 pts/2 00:00:00 grep defunct
[/bash]

刚开始看到/usr/bin/httpsqs的背景颜色是红色的,以为是权限的问题,后来chmod u-s /usr/bin/httpsqs去掉suid属性还是问题依旧。
后来感觉是不是httpsqs启动后是deamon程序,调用的php一直判断这个shell没结果,就一直等,尝试加上nohup后台执行,如下面的写法:
[bash]
system("nohup /home/app/clean_queue.sh > /home/app/log/clean_queue 2>&1", $retval);
[/bash]
果然就不出僵尸进程了。

andriod读取php的json时出现的bom问题

总是提示项目解析json数据时发现报
10-12 02:36:35.964: W/System.err(323): org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject
错误异常,无论更改header的编码还是用纯英文数据都依然提示,搜索一下错误提示,发现有人说是记事本(notepad.exe)保存的php文件保存时带有bom头,解决方案大概有下面几种:
1.继续用记事本保存成ansi就没问题了;
2.换个编辑器重新保存;
3.前面两种情况还是防不胜防,据说在andriod4.0里已有解决方案:
[java]
public JSONTokener(String in) {
// consume an optional byte order mark (BOM) if it exists
if (in != null && in.startsWith("\ufeff")) {
in = in.substring(1);
}
this.in = in;
}
[/java]
具体用法类似
[java]
String json = "{"
+ " \"query\": \"Pizza\", "
+ " \"locations\": [ 94043, 90210 ] "
+ "}";

JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
String query = object.getString("query");
JSONArray locations = object.getJSONArray("locations");
[/java]

centos使用yum安装sysstat

sysstat 使用yum安装
#yum -y install sysstat

我装的是sysstat-7.0.2-11.el5.x86_64.rpm
包括iostat、mpstat、sar、sa的功能

启动sysstat
#/etc/init.d/sysstat start

设置sysstat自启动
#chkconfig sysstat on

mysql复制将slave转化为master

更改my.cnf配置后出现下面的错误提示:
[bash]
[root@zt_script ~]# service mysqld restart
Shutting down MySQL. [ OK ]
Starting MySQL..The server quit without updating PID file ([FAILED]sql/zt_script.pid).
[/bash]

查看错误日志
[bash]
121224 11:01:44 [Warning] Neither –relay-log nor –relay-log-index were used; so replication may break when this MySQL server acts as a slav
e and has his hostname changed!! Please use ‘–relay-log=zt_script-relay-bin’ to avoid this problem.
121224 11:01:44 [ERROR] Failed to open the relay log ‘./mysql-relay-bin.000004′ (relay_log_pos 504)
121224 11:01:44 [ERROR] Could not find target log during relay log initialization
121224 11:01:44 [ERROR] Failed to initialize the master info structure
[/bash]
解决方法:
1.停止slave:
[bash]
slave stop;
reset slave;
[/bash]
2.停止mysqld
[bash]
service mysqld stop
[/bash]
3.然后备份现有的mysql-bin.index和mysql-relay-bin.*日志文件;
4.再删除上面备份前的日志文件;
5.重启即可。

mysql replication主从复制时注意的几个问题

下面几条是我今天研究复制时自己摸索出的规律,不知道是否正确,有误之处,望高手指点:
1.主库和从库的数据库名必须相同;
2.主库和从库的复制可以精确到表,但是在需要更改主库或从库的数据结构时需要立刻重启slave;
3.不能在mysql配置文件里直接写入master的配置信息,需要用change master命令来完成;
4.指定replicate_do_db必须在my.ini里配置,不能用change master命令来完成;
5.如果不及时清理,日积月累二进制日志文件可能会把磁盘空间占满,可以在配置文件里加上expire_logs_days=7,只保留最近7天的日志,建议当slave不再使用时,通过reset slave来取消relaylog;

注:我用的mysql版本都是5.5.x,操作系统是windows server2008 和 centos5.6;

内容更新请关注能做网团队笔记

理解MySQL——复制(Replication)

1、复制概述

1.1、复制解决的问题
数据复制技术有以下一些特点:
(1)    数据分布
(2)    负载平衡(load balancing)
(3)    备份
(4)    高可用性(high availability)和容错

1.2、复制如何工作
从高层来看,复制分成三步:
(1)    master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2)    slave将master的binary log events拷贝到它的中继日志(relay log);
(3)    slave重做中继日志中的事件,将改变反映它自己的数据。

下图描述了这一过程:

该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
SQL slave thread处理该过程的最后一步。SQL线程从中继日志读取事件,更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

 

2、体验MySQL复制
MySQL开始复制是很简单的过程,不过,根据特定的应用场景,都会在基本的步骤上有一些变化。最简单的场景就是一个新安装的master和slave,从高层来看,整个过程如下:
(1)在每个服务器上创建一个复制帐号;
(2)配置master和slave;
(3)Slave连接master开始复制。

2.1、创建复制帐号
每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。用户名的密码都会存储在文本文件master.info中。假如,你想创建repl用户,如下:
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*
-> TO repl@’192.168.0.%’ IDENTIFIED BY ‘p4ssword’;

2.2、配置master
接下来对master进行配置,包括打开二进制日志,指定唯一的servr ID。例如,在配置文件加入如下值:
[mysqld]
log-bin=mysql-bin
server-id=10
重启master,运行SHOW MASTER STATUS,输出如下:

 

2.3、配置slave
Slave的配置与master类似,你同样需要重启slave的MySQL。如下:
log_bin           = mysql-bin
server_id         = 2
relay_log         = mysql-relay-bin
log_slave_updates = 1
read_only         = 1
server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。
relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。
有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,read_only并是很实用,特别是那些需要在slave上创建表的应用。

2.4、启动slave

接下来就是让slave连接master,并开始重做master二进制日志中的事件。你不应该用配置文件进行该操作,而应该使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。如下:

mysql> CHANGE MASTER TO MASTER_HOST=’server1′,

-> MASTER_USER=’repl’,

-> MASTER_PASSWORD=’p4ssword’,

-> MASTER_LOG_FILE=’mysql-bin.000001′,

-> MASTER_LOG_POS=0;

MASTER_LOG_POS的值为0,因为它是日志的开始位置。然后,你可以用SHOW SLAVE STATUS语句查看slave的设置是否正确:

mysql> SHOW SLAVE STATUS\G

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

Slave_IO_State:

Master_Host: server1

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 4

Relay_Log_File: mysql-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: No

Slave_SQL_Running: No

…omitted…

Seconds_Behind_Master: NULL

Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running表明slave还没有开始复制过程。日志的位置为4而不是0,这是因为0只是日志文件的开始位置,并不是日志位置。实际上,MySQL知道的第一个事件的位置是4。

为了开始复制,你可以运行:

mysql> START SLAVE;

运行SHOW SLAVE STATUS查看输出结果:

mysql> SHOW SLAVE STATUS\G

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

Slave_IO_State: Waiting for master to send event

Master_Host: server1

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 164

Relay_Log_File: mysql-relay-bin.000001

Relay_Log_Pos: 164

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

…omitted…

Seconds_Behind_Master: 0

注意,slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看到各种日志文件的位置的变化,同样,你也可以看到数据库中数据的变化。

你可查看master和slave上线程的状态。在master上,你可以看到slave的I/O线程创建的连接:

 

mysql> show processlist \G

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

Id: 1

User: root

Host: localhost:2096

db: test

Command: Query

Time: 0

State: NULL

Info: show processlist

*************************** 2. row ***************************

Id: 2

User: repl

Host: localhost:2144

db: NULL

Command: Binlog Dump

Time: 1838

State: Has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

2 rows in set (0.00 sec)

行2为处理slave的I/O线程的连接。
在slave上运行该语句:

mysql> show processlist \G

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

Id: 1

User: system user

Host:

db: NULL

Command: Connect

Time: 2291

State: Waiting for master to send event

Info: NULL

*************************** 2. row ***************************

Id: 2

User: system user

Host:

db: NULL

Command: Connect

Time: 1852

State: Has read all relay log; waiting for the slave I/O thread to update it

Info: NULL

*************************** 3. row ***************************

Id: 5

User: root

Host: localhost:2152

db: test

Command: Query

Time: 0

State: NULL

Info: show processlist

3 rows in set (0.00 sec)

行1为I/O线程状态,行2为SQL线程状态。

2.5、从另一个master初始化slave
前面讨论的假设你是新安装的master和slave,所以,slave与master有相同的数据。但是,大多数情况却不是这样的,例如,你的master可能已经运行很久了,而你想对新安装的slave进行数据同步,甚至它没有master的数据。
此时,有几种方法可以使slave从另一个服务开始,例如,从master拷贝数据,从另一个slave克隆,从最近的备份开始一个slave。Slave与master同步时,需要三样东西:
(1)master的某个时刻的数据快照;
(2)master当前的日志文件、以及生成快照时的字节偏移。这两个值可以叫做日志文件坐标(log file coordinate),因为它们确定了一个二进制日志的位置,你可以用SHOW MASTER STATUS命令找到日志文件的坐标;
(3)master的二进制日志文件。

可以通过以下几中方法来克隆一个slave:
(1)    冷拷贝(cold copy)
停止master,将master的文件拷贝到slave;然后重启master。缺点很明显。
(2)    热拷贝(warm copy)
如果你仅使用MyISAM表,你可以使用mysqlhotcopy拷贝,即使服务器正在运行。
(3)    使用mysqldump
使用mysqldump来得到一个数据快照可分为以下几步:
<1>锁表:如果你还没有锁表,你应该对表加锁,防止其它连接修改数据库,否则,你得到的数据可以是不一致的。如下:
mysql> FLUSH TABLES WITH READ LOCK;
<2>在另一个连接用mysqldump创建一个你想进行复制的数据库的转储:
shell> mysqldump –all-databases –lock-all-tables >dbdump.db
<3>对表释放锁。
mysql> UNLOCK TABLES;

3、深入复制
已经讨论了关于复制的一些基本东西,下面深入讨论一下复制。

3.1、基于语句的复制(Statement-Based Replication)
MySQL 5.0及之前的版本仅支持基于语句的复制(也叫做逻辑复制,logical replication),这在数据库并不常见。master记录下改变数据的查询,然后,slave从中继日志中读取事件,并执行它,这些SQL语句与master执行的语句一样。
这种方式的优点就是实现简单。此外,基于语句的复制的二进制日志可以很好的进行压缩,而且日志的数据量也较小,占用带宽少——例如,一个更新GB的数据的查询仅需要几十个字节的二进制日志。而mysqlbinlog对于基于语句的日志处理十分方便。

但是,基于语句的复制并不是像它看起来那么简单,因为一些查询语句依赖于master的特定条件,例如,master与slave可能有不同的时间。所以,MySQL的二进制日志的格式不仅仅是查询语句,还包括一些元数据信息,例如,当前的时间戳。即使如此,还是有一些语句,比如,CURRENT USER函数,不能正确的进行复制。此外,存储过程和触发器也是一个问题。
另外一个问题就是基于语句的复制必须是串行化的。这要求大量特殊的代码,配置,例如InnoDB的next-key锁等。并不是所有的存储引擎都支持基于语句的复制。

3.2、基于记录的复制(Row-Based Replication)
MySQL增加基于记录的复制,在二进制日志中记录下实际数据的改变,这与其它一些DBMS的实现方式类似。这种方式有优点,也有缺点。优点就是可以对任何语句都能正确工作,一些语句的效率更高。主要的缺点就是二进制日志可能会很大,而且不直观,所以,你不能使用mysqlbinlog来查看二进制日志。
对于一些语句,基于记录的复制能够更有效的工作,如:
mysql> INSERT INTO summary_table(col1, col2, sum_col3)
-> SELECT col1, col2, sum(col3)
-> FROM enormous_table
-> GROUP BY col1, col2;
假设,只有三种唯一的col1和col2的组合,但是,该查询会扫描原表的许多行,却仅返回三条记录。此时,基于记录的复制效率更高。
另一方面,下面的语句,基于语句的复制更有效:
mysql> UPDATE enormous_table SET col1 = 0;
此时使用基于记录的复制代价会非常高。由于两种方式不能对所有情况都能很好的处理,所以,MySQL 5.1支持在基于语句的复制和基于记录的复制之前动态交换。你可以通过设置session变量binlog_format来进行控制。

3.3、复制相关的文件
除了二进制日志和中继日志文件外,还有其它一些与复制相关的文件。如下:
(1)mysql-bin.index
服务器一旦开启二进制日志,会产生一个与二日志文件同名,但是以.index结尾的文件。它用于跟踪磁盘上存在哪些二进制日志文件。MySQL用它来定位二进制日志文件。它的内容如下(我的机器上):

(2)mysql-relay-bin.index
该文件的功能与mysql-bin.index类似,但是它是针对中继日志,而不是二进制日志。内容如下:
.\mysql-02-relay-bin.000017
.\mysql-02-relay-bin.000018
(3)master.info
保存master的相关信息。不要删除它,否则,slave重启后不能连接master。内容如下(我的机器上):

I/O线程更新master.info文件,内容如下(我的机器上):

 

.\mysql-02-relay-bin.000019

254

mysql-01-bin.000010

286

0

52813

 

(4)relay-log.info
包含slave中当前二进制日志和中继日志的信息。

 

3.4、发送复制事件到其它slave
当设置log_slave_updates时,你可以让slave扮演其它slave的master。此时,slave把SQL线程执行的事件写进行自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它。如下:

 

3.5、复制过滤(Replication Filters)
复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:在master上过滤二进制日志中的事件;在slave上过滤中继日志中的事件。如下:

 

4、复制的常用拓扑结构
复制的体系结构有以下一些基本原则:
(1)    每个slave只能有一个master;
(2)    每个slave只能有一个唯一的服务器ID;
(3)    每个master可以有很多slave;
(4)    如果你设置log_slave_updates,slave可以是其它slave的master,从而扩散master的更新。

MySQL不支持多主服务器复制(Multimaster Replication)——即一个slave可以有多个master。但是,通过一些简单的组合,我们却可以建立灵活而强大的复制体系结构。

4.1、单一master和多slave
由一个master和一个slave组成复制系统是最简单的情况。Slave之间并不相互通信,只能与master进行通信。如下:

如果写操作较少,而读操作很时,可以采取这种结构。你可以将读操作分布到其它的slave,从而减小master的压力。但是,当slave增加到一定数量时,slave对master的负载以及网络带宽都会成为一个严重的问题。
这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。一些建议:
(1)    不同的slave扮演不同的作用(例如使用不同的索引,或者不同的存储引擎);
(2)    用一个slave作为备用master,只进行复制;
(3)    用一个远程的slave,用于灾难恢复;
4.2、主动模式的Master-Master(Master-Master in Active-Active Mode)
Master-Master复制的两台服务器,既是master,又是另一台服务器的slave。如图:

主动的Master-Master复制有一些特殊的用处。例如,地理上分布的两个部分都需要自己的可写的数据副本。这种结构最大的问题就是更新冲突。假设一个表只有一行(一列)的数据,其值为1,如果两个服务器分别同时执行如下语句:
在第一个服务器上执行:
mysql> UPDATE tbl SET col=col + 1;
在第二个服务器上执行:
mysql> UPDATE tbl SET col=col * 2;
那么结果是多少呢?一台服务器是4,另一个服务器是3,但是,这并不会产生错误。
实际上,MySQL并不支持其它一些DBMS支持的多主服务器复制(Multimaster Replication),这是MySQL的复制功能很大的一个限制(多主服务器的难点在于解决更新冲突),但是,如果你实在有这种需求,你可以采用MySQL Cluster,以及将Cluster和Replication结合起来,可以建立强大的高性能的数据库平台。但是,可以通过其它一些方式来模拟这种多主服务器的复制。

4.3、主动-被动模式的Master-Master(Master-Master in Active-Passive Mode)
这是master-master结构变化而来的,它避免了M-M的缺点,实际上,这是一种具有容错和高可用性的系统。它的不同点在于其中一个服务只能进行只读操作。如图:

4.4、带从服务器的Master-Master结构(Master-Master with Slaves)
这种结构的优点就是提供了冗余。在地理上分布的复制结构,它不存在单一节点故障问题,而且还可以将读密集型的请求放到slave上。

 

主要参考:《High Performance MySQL》

Mysql replication 配置

操作系统:中标Linux
Mysql版本:mysql-server.i386 0:5.0.45-7.el5
(注:安装mysql是用的yum命令)
Master端IP:192.168.2.122
Slave端IP:192.168.2.123
1 主机master设置
1.1 测试用数据库
1. 建立名为test1的数据库
create database test1;
2. 建立表名为test1的表
CREATE TABLE `test1` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) , PRIMARY KEY (`id`) );
3. 在表test1中插入3条测试数据
INSERT INTO `test1` VALUES (1,’name1′);
INSERT INTO `test1` VALUES (2,’name2′);
INSERT INTO `test1` VALUES (3,’name3′);
1.2 设置Mysql Replication
1. 增加一用于数据库同步的用户root
mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO ‘root’@’192.168.2.123′ IDENTIFIED BY ‘password’;
(授与从192.168.2.123主机上登录用户root数据复制权限)
2. 使权限生效,这步可不做,因为过会要重启mysql
mysql>flush privileges;
3. 退出mysql命令行界面
mysql> exit
4. 停止mysql服务
service mysqld stop
5. 更改Mysql配置文件/etc/my.cnf
1) 打开mysql配置文件
vi /etc/my.cnf
2) 在配置文件中添加以下内容
log-bin= mysql-bin
server-id=1
binlog-do-db= test1
6. 将要进行热备的数据库test1打包
tar czvf /var/lib/mysql/test1.tar.gz test1
7. 启动Mysql
service mysqld start
2 备机slave设置
1. 更改Mysql配置文件/etc/my.cnf
3) 打开Mysql的配置文件
vi /etc/my.cnf
4) 在配置文件中添加以下内容
master-host = 192.168.2.122
master-user = root
master-password = password
master-port = 3306
master-connect-retry = 10
replicate-do-db = test1
2. 将先前(1.2中第6步)从master打包的数据库文件test1.ter.gz发送到备机slave的相应目录下,本次在/var/lib/mysql目录,解压文件并修改其可执行权限
cd /var/lib/mysql
tar zxvf test1.tar.gz
chmod 700 test1
chmod 660 test1
3. 重新启动Mysql服务
service mysqld restart
4. 启动slave
mysql> START SLAVE;
查看slave状态:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.122
Master_User: root
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 582
Relay_Log_File: mysqld-relay-bin.000005
Relay_Log_Pos: 515
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test1,test1
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: 582
Relay_Log_Space: 515
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
如果都是yes,代表已经在同步
至此server服务器上的Mysql设置完毕
3 测试
1. 主机和备机都正常运行情况,对主机进行增加一条记录INSERT INTO `test1` VALUES (6,’name6′); 检测备机是否也增加了此条记录,经检查,数据相同
2. 主机和备机都正常运行情况,在主机没有对数据库操作的情况下测试主备数据是否一致,经查看主机和备机的的test1表,记录相同,说明备机成功复制数据。
3. 主机和备机都正常运行情况,停掉备机mysql,对主机进行添加记录的操作,然后再重启备机mysql,经检查,两边数据完全一致。
4. 主机和备机都正常运行情况,在主机执行mysql> delete from test1 where id=3; 检测两边数据是否一致。经检查,两边数据完全一致。

ping命令出现connect: network is unreachable 的问题

今天在hyper-v上装centos虚拟机是出现上面错误提示。

vim /etc/sysconfig/network-scripts/ifcfg-seth0

 

DEVICE=seth0
HWADDR=00:15:5d:01:bb:09
BOOTPROTO=static
BROADCAST=192.168.1.255
NETMASK=255.255.255.0
IPADDR=192.168.1.134
#NETWORK=192.168.1.1
IPV6INIT=no
ONBOOT=yes
PEERDNS=yes

只需要按实际情况修改 DEVICE HWADDR NETMASK IPADDR 这几项即可。
然后service network restart

如果还不行,请查看resolv.conf文件
# vi /etc/resolv.conf
加入相应的dns server ip

Hyper-V装CentOS需要的Linux Integration Components的步骤分享[精]

步骤如下:

首先需要kernel-devel和gcc
我的是64位的CentOS,还需要adjtimex RPM确保时间准确性
因为没网,安装就得从光盘安装。要将yum的repo设置为光盘
于是
# cd /etc/yum.repo.d
1两个repo
CentOS内有两个repo
CentOS-Base.repo及CentOS-Media.repo
Base.repo是在线更新repo
Media.repo是输入设备repo
先将的CentOS-Base.repo更名,让系统跳过该repo
# mv CentOS-Base.repo  CentOS-Base.repo.bk
设定repo来源,baseurl设为光驱目录 /mnt/cdrom,enabled为1代表启动
# vim CentOS-Media.repo
2vim CentOS-Media.repo
改成
3改成把CentOS的碟载入本虚拟机光驱然后挂载到目录# mkdir /mnt/cdrom# mount /dev/cdrom /mnt/cdrom4挂载到目录安装kernel-devel套件# yum install kernel kernel-devel -y完成后安装gcc套件# yum install gcc -y64位系统还需要安装adjtimex RPM# rpm –ivh /mnt/cdrom/Centos/adjtimex-1.20-2.1.x86_64.rpm然后umount 原始安裝光碟# umount /mnt/cdrom在Hyper-V控制器里面把微软官网Linux Integration Services v2.1 for Windows Server 2008 Hyper-V R2地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=eee39325-898b-4522-9b4c-f4b5b9b64551解压得到的ISO加载到光驱然后# mount -t  iso9660  /dev/cdrom  /mnt/cdrom# cp /mnt/cdrom/* /opt/linux -R然后去安装就行了
# cd /opt/linux_ic_v21_rtm# make# make install
最后重启# reboot
配置好了可以ifconfig看看
5ifconfig看看
名称分别为ifcfg-eth0,ifcfg-eth1….如果你有一块CentOS网卡IP,就只有ifcfg-eth0一个文件,如果你有两块或者两块以上的CentOS网卡IP,就会有ifcfg-eth1、ifcfg-eth2等文件的出现。文件结构:
  1. DEVICE=eth0 //指出设备名称BOOTPROTO=static//启动类型 dhcp,,,,dcph或static 自动和手动BROADCAST=192.168.1.255 //广播地址HWADDR=00:06:5B:FE:DF:7C//硬件Mac地址IPADDR=192.168.0.2//IP地址NETMASK=255.255.255.0   //子网掩码NETWORK=192.168.0.1     //网络地址ONBOOT=yes  //是否启动应用TYPE=Ethernet     //网络类型

1  vim /etc/sysconfig/network-scripts/ifcfg-teh02 .启动服务service network restartCentOS网卡编辑主机用的DNS服务器信息命令:vim /etc/resolv.conf

Windows Server打开网页时老是提示添加网址到信任站点的设置

在Windows Server系统中,我们打开网页,或打开网站,或浏览网页时,老是跳出一个窗口提示“添加网址到信任站点”,“网页老是提示添加信任”或“每打开一次网页都要加入受信任站点”或“提示信任站点”或“打开网页提示把此网页加入可信站点怎么处理”或“打开网页提示”等等描述都是对这个问题的反应。

Server版的操作系统,的确比其它操作系统在安全上增加了不少,这是为用户所考虑的。当然,既然提供了安全性,尤其是在上网的时候,可以禁止某些活动脚本的显示,这样,就可以多方面的避免在使用IE浏览器上网的时候,计算机少遭受受木马或病毒。

然而,也正是由于此安全功能的加强,导致上网的时候,有诸多不便。比如,无论打开哪个网站,都会提示“是否需要将当前访问的网站添加到自己信任的站点中去”。如果不添加,那么,网页将无法正常打开,如果添加,那么,假如每打开一个网站都这样操作,会让人在浏览网页的时候,心情不舒畅。

当然,很多人也知道,通过设置IE的安全级别为中或中低即可,但是,总是无法成功设置,一个,一旦设置后,IE的安全设置会自动恢复到高的级别。

所以,请使用如下的方法来解决。

1. Windows Server 2003

一、根本性的解决办法

由于您在安装WIN2003的时候,默认就安装了IE的“Internet Explorer增强安全配置”,所以,要想从根本上解决这个问题,就得将其删除。

删除的方法如下:

开始→控制面版→添加/删除程序→添加/删除windows组件。


上图中,将“Internet Explorer增强的安全配置”前面的√去掉,然后“下一步”,弹出如下图的windows组件向导。


上图中,什么也不用管,会自动完成,就这样,整个过程结束,现在,您的IE浏览器的安全级别,就自然降为中或者是中低了。如此,上网的时候就不用那么麻烦了。

二、辅助性的设置方法

修改组策略后修改默认安全性

方法如下:单击开始→运行,输入“gpedit.msc”(不包括双引号)确定。

在本地策略中,依次寻找“计算机配置→管理模板→windows组件→Internet Explorer→安全区域:仅使用计算机配置”

然后将其配置为启用。

最后,在IE上右键选择“属性”→安全,在安全选项框中,你会看到安全级别是高,讲其调低点,一般调到“中”就行了,如果还是会弹出警告,就调成“中低”级别。

2. Windows Server 2008

打开“服务器管理器”,在“服务器摘要”里面有个链接“配置IE ESC”,对应相应用户禁用一下就可以了。