Rootop 服务器运维与web架构

2013-01-09
发表者 Venus
暂无评论

分析 show slave status 返回值

mysql> show slave status\G;
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 1xx.3.4x.2xx
                Master_User: root
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000120    //主库BinaryLog名
        Read_Master_Log_Pos: 974015581           //主库BinaryLog偏移量,只要有数据更新就会增长。
             Relay_Log_File: mysqld-relay-bin.000020    //从库中继日志名
              Relay_Log_Pos: 320839203                  //从库中继日志偏移量
      Relay_Master_Log_File: mysql-bin.000120    //对当前主库BinaryLog做中继
           Slave_IO_Running: Yes       //接收更新状态
          Slave_SQL_Running: Yes       //执行状态
            Replicate_Do_DB: nq        //复制的库
        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         //可以跳过Last_Errno
        Exec_Master_Log_Pos: 974015581 //执行到的偏移量
            Relay_Log_Space: 320839203 //中继偏移量
            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)

ERROR:
No query specified

正常同步状态下,两个蓝色部分值一致、两个红色部分值也一致!如果出现问题Read_Master_Log_Pos值增长,Exec_Master_Log_Pos会停止。以此数+1作为重新同步偏移量.Relay_Master_Log_File值作为同步日志。
在从库mysql路径下会有一个relay-log.info文件,记录了从库执行的主库二进制日志名称、偏移量、中继日志名称、偏移量等信息。这些值跟从库show slave status是一致的。

[root@s2 mysql]# cat relay-log.info
./mysqld-relay-bin.000020  //中继日志名称
320507555
mysql-bin.000120  //主库
973683933
主:
mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin.000120
        Position: 981377928
    Binlog_Do_DB: nq
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)

ERROR:
No query specified

2013-01-06
发表者 Venus
暂无评论

mysql复制 (主从同步、单向同步)

做同步主从数据库版本最好一致,或者从库版本高于主库。

主库配置:/etc/my.cnf

添加:
log-bin=mysql-bin   //开启二进制日志
server-id       = 1      //服务器id,主库一般为1
binlog-do-db = rootop   //对rootop库记录二进制日志,一行一个。
binlog-ignore-db = mysql   //排除二进制日志记录的库

配置主库允许远程连接,这里为了方便直接给最高权限:

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’IDENTIFIED BY ‘YourPassword’ WITH GRANT OPTION;
mysql> flush privileges;      //刷新权限

mysql> flush tables with read lock;   //锁定表,只读,保证数据一致,如果没有写入或者不重要可略过。

Query OK, 0 rows affected (0.19 sec)
mysql> show master status;    //主服务器当前二进制日志名和偏移量

+——————+———-+————–+——————+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000102 |      106 | networkq    |                  |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

mysql>
主库备份(mysqldump),还原到从库。

mysql> unlock tables;         //解锁之前的锁定表,之前没做的话略过。

Query OK, 0 rows affected (0.28 sec)
 

从库配置:/etc/my.cnf

server-id       = 2                                        //总之大于主库,不能重复

#master-host = 172.17.1.10                    //主库ip
#master-user = root                                //主库同步的用户名
#master-password = YourPassword    //同步用户名的密码

这3行绿色部分可以不用在my.cnf中体现,之后在mysql命令行中可配置。
master-port = 3306                //主库端口
master-connect-retry = 60    //连接主库重试时间
replicate-do-db = rootop        //复制的库

replicate-do-db = DB_name                                              //复制哪个库
replicate-ignore-db = DB_name                                       //忽略哪个库

replicate-do-table = DB_name.TAB_name                    //复制表,有几个就写几行
replicate-ignore-table = DB_name.TAB_name             //忽略的表

replicate-wild-do-table = DB_name.TAB_name          //支持通配符复制表
replicate-wild-ignore-table = DB_name.TAB_name   //忽略的表

绿色部分为所支持的参数。

保存退出,重启mysql服务!

进入mysql命令行执行:

mysql> slave stop;      //停止从库复制状态
mysql> reset slave;    //重置从库配置
Query OK, 0 rows affected (0.00 sec)

mysql> change master to
-> master_host=’172.17.1.10′,    //主库ip,注意结尾是 逗号
-> master_user=’root’,                //主库有效的用户
-> master_password=’YourPassword’,         //密码
-> master_log_file=‘mysql-bin.000102’,     //之前记下的二进制日志名
-> master_log_pos=106;                                //偏移量,注意 没有单引号
Query OK, 0 rows affected (0.09 sec)

mysql> slave start;                         //启动复制
mysql> show slave status\G;        //查看从库状态

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

以上两项必须为两个YES才为成功。

参考手册:https://www.rootop.org/mysql5-1/replication.html

网上搜的一个检测脚本:

#!/bin/bash
mysql -uroot -pYourPassword -e “show slave status\G;” | grep -i Running | egrep “IO|SQL” | grep -i yes | wc -l
exit

保存为.sh文件,加执行权限,返回值为2说明从库正常,如果为其它值,要检查错误了。

2013-01-01
发表者 Venus
暂无评论

shell倒计时

      要用任务计划做一个30秒执行一次的任务,可是crontab不支持到秒,最小单位为分钟,只好用shell来解决,最后用sleep 30秒完成。

#!/bin/bash
while true
do
sleep 30s
echo “Say Hello”
done

2012-12-24
发表者 Venus
Last_Error: Error ‘Duplicate entry ‘1’ for key 1′ on query. Default database:已关闭评论

Last_Error: Error ‘Duplicate entry ‘1’ for key 1′ on query. Default database:

Last_Error: Error ‘Duplicate entry ‘1’ for key 1′ on query. Default database: ‘nq’. Query: ‘INSERT INTO t_nq

做的数据库主从同步,发现网站异常,检查从库时发现报错。

(后来发现这种错误是插入了重复的数据导致)

Slave_IO_Running: Yes
Slave_SQL_Running: No

Last_Errno: 1062

更新插入语句有问题,会经常出现,我们可以忽略这个错误:

mysql> show variables like “%slave%”;
+—————————+——-+
| Variable_name             | Value |
+—————————+——-+
| init_slave                |       |
| log_slave_updates         | OFF   |
| slave_compressed_protocol | OFF   |
| slave_load_tmpdir         | /tmp/ |
| slave_net_timeout         | 3600  |
| slave_skip_errors | OFF  |
| slave_transaction_retries | 10    |
+—————————+——-+
7 rows in set (0.00 sec)

可以看到slave_skip_errors 参数关闭了。那么可以从这里下手了。

两种解决方法:

1、 从库执行:
stop slave;
set global sql_slave_skip_counter =1 ;
start slave;

2、修改从库:/etc/my.cnf

slave-skip-errors = 1062     //多个错误号码可用逗号隔开

重启服务。

似乎第一种方法对我没用,直接修改配置文件,忽略1062错误。

mysql> show slave status\G;

检查Seconds_Behind_Master的值,直到为0时,与主库同步完成。

2012-12-19
发表者 Venus
redhat5.5 安装oracle10已关闭评论

redhat5.5 安装oracle10

    系统环境:redhat5.5_x64 oracle 10.2

1、先安装所需的rpm包
yum install -y binutils compat-db control-center gcc gcc-c++ glibc glibc-common libstdc++ libstdc++-devel make pdksh sysstat xorg-x11-deprecated-libs glibc-devel
2、添加相关的用户及组
[root@oracle ~]# groupadd oinstall
[root@oracle ~]# groupadd dba
[root@oracle ~]# useradd -g oinstall -G dba oracle
[root@oracle ~]# passwd oracle
3、修改配置文件
[root@oracle ~]# vi /etc/sysctl.conf    //If the current value of any parameter is higher than the value listed in this table, then do not change the value of that parameter.

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144

[root@oracle ~]# vi /etc/security/limits.conf

oracle           soft    nproc   2047
oracle           hard    nproc   16384
oracle           soft    nofile  1024
oracle           hard    nofile  65536

[root@oracle ~]# vi /etc/pam.d/login
session    required     pam_limits.so

切换到oracle
[root@oracle ~]# su – oracle

添加以下部分:
[oracle@oracle ~]$ vi .bash_profile

if [ $USER = “oracle” ]; then
        if [ $SHELL = “/bin/ksh” ]; then
              ulimit -p 16384
              ulimit -n 65536
        else
              ulimit -u 16384 -n 65536
        fi
fi

修改系统版本信息
[root@oracle ~]#echo redhat-4 > /etc/redhat-release

[root@oracle ~]# mkdir -p /u01/app/oracle/oraInventory
[root@oracle ~]# chown -R oracle:oinstall /u01/app/oracle/
[root@oracle ~]# chmod -R 775 /u01/app/oracle/

reboot server into GUI with oracle user.

export LANG=en   //如果系统安装选的中文,则执行。oracle10不支持中文,要不会出现图形乱码

然后 ./runInstaller开始安装。

PS:

为什么文档里面没有配置环境变量的参数。