今天发现Mysql的主从数据库没有同步

先上Master库:

mysql>show processlist; 查看下进程是否Sleep太多。发现很正常。

show master status; 也正常。

mysql> show master status;

+-------------------+----------+--------------+-------------------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+-------------------------------+

| mysqld-bin.000001 | 3260 | | mysql,test,information_schema |

+-------------------+----------+--------------+-------------------------------+

1 row in set (0.00 sec)

再到Slave上查看

mysql> show slave status\G

Slave_IO_Running: Yes

Slave_SQL_Running: No

可见是Slave不同步

下面介绍两种解决方法:

方法一:忽略错误后,继续同步

该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况

解决:

stop slave;

#表示跳过一步错误,后面的数字可变

set global sql_slave_skip_counter =1;

start slave;

之后再用mysql> show slave status\G 查看:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

ok,现在主从同步状态正常了。。。

方式二:重新做主从,完全同步

该方法适用于主从库数据相差较大,或者要求数据完全统一的情况

解决步骤如下:

1.先进入主库,进行锁表,防止数据写入

使用命令:

mysql> flush tables with read lock;

注意:该处是锁定为只读状态,语句不区分大小写

2.进行数据备份

#把数据备份到mysql.bak.sql文件

[root@server01 mysql]#mysqldump -uroot -p -hlocalhost > mysql.bak.sql

这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失

3.查看master 状态

mysql> show master status;

+-------------------+----------+--------------+-------------------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+-------------------------------+

| mysqld-bin.000001 | 3260 | | mysql,test,information_schema |

+-------------------+----------+--------------+-------------------------------+

1 row in set (0.00 sec)

4.把mysql备份文件传到从库机器,进行数据恢复

#使用scp命令

[root@server01 mysql]# scp mysql.bak.sql root@192.168.128.101:/tmp/

5.停止从库的状态

mysql> stop slave;

6.然后到从库执行mysql命令,导入数据备份

mysql> source /tmp/mysql.bak.sql

7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项

change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260;

8.重新开启从同步

mysql> stop slave;

9.查看同步状态

mysql> show slave status\G 查看:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

好了,同步完成啦。


strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息

可谓是 linux 下的调试利器,不仅可以用来找程序错误,系统为什么挂死了,命令为什么报错,还可以用来查找哪些程序占用系统资源。

命令实例

比如,但网站服务器负载过大,网站数量又多,不知是那个网站占用太多资源,这时strace派上用场了。

第一步,查看 php-cgi 进程号:

ps aux|grep php-cgi

第二步,查看系统调用

strace -p 进程号

或者,将记录结果存在output.txt文件中

strace -o output.txt -T -tt -e trace=all -p 进程号

mac下的命令为dtruss

pstack 看活动的进程内的堆栈

pstack 进程号

用top查看某个进程的信息,top -p 进程号

top之后按P是按cpu使用率排序,M是按内存使用率排序


通常我们用 ls -l 来查看目录下文件,第一列有10个字符,第一个字符就是代表着当前文件的属性,Linux的文件属性有6种

1、d表示该文件是一个目录,字母"d",是dirtectory(目录)的缩写

        注意:目录或者是特殊文件,这个特殊文件存放其他文件或目录的相关信息

2、l表示该文件是一个链接文件。字母"l"是link(链接)的缩写,类似于windows下的快捷方式

3、b的表示块设备文件(block),一般置于/dev目录下,设备文件是普通文件和程序访问硬件设备的入口,是很特殊的文件。没有文件大小,只有一个主设备号和一个辅设备号。一次传输数据为一整块的被称为块设备,如硬盘、光盘等。最小数据传输单位为一个数据块(通常一个数据块的大小为512字节)

4、c表示该文件是一个字符设备文件(character),一般置于/dev目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节

5、p表示该文件为命令管道文件。与shell编程有关的文件

6、s表示该文件为sock文件。与shell编程有关的文件

在php下面可以用 posix_mkfifo('/tmp/test.sock', 0666); 来创建一个管道文件,ulink来删除一个管道文件

用 stream_socket_server("unix:///tmp/test.sock", $errno, $errmsg); 来创建一个 sock文件,ulink('/tmp/test.sock')删除sock文件,记住不是ulink('unix:///tmp/test.sock');


CLOC -- Count Lines of Code

可能大家都知道用 `wc -l` 命令进行代码行数统计,但是它会将代码中的注释、空行所占用的文本行都统计在内。如果想查看一个 tar 包或一个项目目录中“实际”的代码行数并且不愿意自己去写一个脚本来做此类工作,那么可以考虑使用 cloc。

cloc 是一个 perl 脚本,它可以统计很多种编程语言的代码文件中的空行、注释以及实际的代 码行数。

官方地址: http://cloc.sourceforge.net/

安装:

1、找到最新版下载地址并下载

2、解压

tar zxvf cloc-1.62.tar.gz

3、安装

sudo make install

只需上面简单的几部,即可安装好cloc,Linux、Mac下面都亲测成功!

使用

1、统计目录下代码行数

   $ cloc ./
      11 text files.
       6 unique files.                              
       8 files ignored.
    <a href="http://cloc.sourceforge.net">http://cloc.sourceforge.net</a> v 1.62  T=0.18 s (16.5 files/s, 54526.8 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Perl                             2            697           1048           8054
make                             1             26             35             75
-------------------------------------------------------------------------------
SUM:                             3            723           1083           8129
-------------------------------------------------------------------------------

2、统计压缩包代码行数

cloc swoole-src-swoole-1.7.8-stable.tar.gz
     270 text files.
     270 unique files.                                          
      64 files ignored.
http://cloc.sourceforge.net v 1.62  T=1.26 s (163.6 files/s, 29714.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                               83           3136           2473          21520
C/C++ Header                    22            746            845           3788
PHP                             87            421            393           3118
XML                              1              2              0            490
m4                               1             33              7            202
Go                               3             17              4             76
CMake                            1             16             11             29
C++                              1              6             15             26
YAML                             1              7              1             13
Javascript                       2              2              0             11
make                             2              1              0              5
Python                           1              2              0              5
Bourne Shell                     1              1              0              2
-------------------------------------------------------------------------------
SUM:                           206           4390           3749          29285
-------------------------------------------------------------------------------

3、对比压缩包代码差异

cloc --diff swoole-src-swoole-1.7.8-stable.tar.gz swoole-src-swoole-1.7.9-stable.tar.gz

更多使用方法,请看官网。。。


一个产品的编码完成,并不能代表产品能够给用户体验,其中还必须包含测试、压测分析等,而往往我们的产品上线前却忽略掉压测分析。既然压测分析很重要那么我们应该如何进行呢?

工具:

ab、webbench、siege、benchmark

使用方法:http://www.epooll.com/archives/768/

系统优化:

Linux 默认的设置并不能满足高并发需求,需要进行以下设置

1、文件打开数

临时设置

ulimit -n 102400

永久设置

echo 'ulimit -SHn 102400' >> /etc/profile

source /etc/profile 

2、端口最大的监听队列的长度

echo 'net.core.somaxconn = 120000' >> /etc/sysctl.conf

sysctl -p

或:

echo 120000>/proc/sys/net/core/somaxconn

somaxconn定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128,对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。大多数环境这个值建议增加到 1024 或者更多。 服务进程会自己限制侦听队列的大小(例如 sendmail(8) 或者 Apache),常常在它们的配置文件中有设置队列大小的选项。大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助。

压测:

1、短连接

ab -n 100000 -c1000 192.168.0.170:2000/

服务器对应操作:

$serv->send($fd, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\nhello");

$serv->close($fd);

2、长连接

ab -k -n 100000 -c1000 192.168.0.170:2000/

服务器对应操作:

$serv->send($fd, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\nConnection: keep-alive\r\n\r\n");

//$serv->close($fd);  // 记得不要关闭连接,否则就又成了短连接了

注意:

如果ulimit是默认的1024,那-n 顶多就1024,多了,也是会在1024以内就出现:

apr_socket_recv: Connection reset by peer (104)

Total of 8813 requests completed

如果somaxconn还是默认的128也会出现上面的错误,所以压测的前提是提高

1、进程文件打开数

2、端口监听队列