磁盘满Mysql同步状态显示正常实际不同步

今天有台mysql从数据库服务器因为磁盘满了而导致同步失败,访问也失败,清理空间后重启mysql一切都显示正常,查看同步专业如下:

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.10.10.1
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.006842
Read_Master_Log_Pos: 67309612
Relay_Log_File: mysqld-relay-bin.019867
Relay_Log_Pos: 66793478
Relay_Master_Log_File: master-bin.006833
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

同步的两个slave都是yes,也就没留意它了,到后来才发现它实际上停止的,没有任何错误提示,想想取消同步,再开启说不定就可以了,结果一执行stop slave就卡死了。

mysql> stop slave;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect…
Connection id: 15367
Current database: *** NONE ***

接下来就什么都操作不了了,kill mysql重新启动重复操作都不行。

应该是磁盘满的时候同步的日志文件没有写完整,导致同步的时候卡死。最后查看mysql任务列表发现有个卡了1865618秒的Waiting for an event from Coordinator复制进程任务,决定kill它,应该是它卡了很久。

mysql> show processlist;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect…
Connection id: 18126
Current database: *** NONE ***

+——-+————-+———–+——+———+———+———————————————–+——————+
| Id | User | Host | db | Command | Time | State | Info |
+——-+————-+———–+——+———+———+———————————————–+——————+
| 16549 | system user | | NULL | Connect | 685 | Waiting for master to send event | NULL |
| 16550 | system user | | NULL | Connect | 685 | Waiting for Slave Worker to release partition | NULL |
| 16551 | system user | | NULL | Connect | 1865618 | Waiting for an event from Coordinator | NULL |
| 18126 | root | localhost | NULL | Query | 0 | init | show processlist |
+——-+————-+———–+——+———+———+———————————————–+——————+
4 rows in set (0.00 sec)

kill后确实可以stop slave同步了,可是一启动,又出现了,而且同样实际没有同步,会卡死所有的别的操作,最后没办法,只能老办法关闭多线程复制,改成单线程复制试试看。

mysql> set global slave_parallel_workers = 0;

重新kill,再开启同步,结果发现复活了。不知道为什么开始多并发同步就会卡死在一些错误的地方。同样暂时没有详细去寻找答案。

发表在 服务器 | 标签为 | 留下评论

php使用md5字符编码gbk和utf8有所不同

在一套新老系统上使用md5加密的方式读取相同用户表密码的时候,出现了md5加密后不一致的结果,最后查询是因为字符编码不一致导致的,php使用md5字符编码的时候要注意中文字符在gbk和utf8两种编码进行转换后是有所不同,而纯英文字符和数字却不会有这个问题,小心让你翻车。^_^

 

发表在 服务器 | 标签为 | 留下评论

composer.json和composer.lock有什么区别?

composer install - 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖;
composer update - 从 composer.json 安装最新扩展包和依赖;
composer update vendor/package - 从 composer.json 或者对应包的配置,并更新到最新;
composer require new/package - 添加安装 new/package, 可以指定版本,如: composer require kartik-v/yii2-date-range "*"

当一个项目需要多人合作的时候,为了让所有人都使用与您正在使用的完全相同的依赖项。因此,为了保证这一点,Composer官方是建议把composer.lock提交到git上。

每当去更新依赖的时候,都是基于composer.lock,去更新的。composer.lock文件阻止您自动获取最新版本的依赖项。

所有依赖要更新到最新版本,请使用composer update命令,但一般不要使用update命令,因为update命令将更新所有的依赖到最新,这个动作是危险的,这样很有可能导致,最新类库和你以前写的东西冲突,你以前的代码不可用。

发表在 服务器 | 标签为 | 留下评论

【原创】生成锚文本preg_replace替换字符串返回Null的问题

今天实现文章锚文本,使用preg_replace数组替换字符串的时候发生了一下情况
$content = preg_replace(‘/netpc(括号)/’,’abc’,’测试netpc(括号)文本’);
$content返回值为Null,也并没有告诉你错误原因和位置。
最后测试得出,preg_replace在替换字符串中包括了 ()全角和半角括号同时存在的时候会出错
使用addcslashes转义还不行,查询文档最后发现用quotemeta转义元字符集后替换就正常了。
函数说明:https://www.php.net/manual/zh/function.quotemeta.php
返回 在下面这些特殊字符前加 反斜线(\) 转义后的字符串。 这些特殊字符包含:
. \ + * ? [ ^ ] ( $ )

发表在 服务器 | 标签为 | 留下评论

【原创】Nginx反向代理根据url参数访问后端指定服务器

今天因为工作需要,需要指定图片访问的是后端指定的反向代理服务器。
最后修改nginx配置实现,访问效果//img.netpc.com.cn/1.jpg?server=100或者//img.netpc.com.cn/1.jpg?server=101
配置大家自己看就好了,不懂留言。

upstream images {
	ip_hash;
	server 192.168.0.100:8008 weight=5;
	server 192.168.0.101:8008 weight=5;	
}
server {
	listen       80;
	server_name  img.netpc.com.cn;
	#charset utf-8;

	access_log  /data/logs/nginx/cluster.img.log;

	location / {
		#limit_req zone=ddos burst=30 nodelay;
		
		set $server 0;
		if ($query_string ~* "server=(\d+)$") {
			set $server $1;
		}
		if ($server = "100"){
			proxy_pass http://192.168.0.100:8008;
		}
		if ($server = "100"){
			proxy_pass http://192.168.0.101:8008;
		}
		if ($server = "0"){
			proxy_pass http://images;
		}
		
		proxy_redirect off;    
		proxy_set_header Host $host;    
		proxy_set_header X-Real-IP $remote_addr;    
		proxy_set_header SSL_CERT $ssl_client_cert;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
		client_max_body_size 10m;    
		client_body_buffer_size 128k;    
		proxy_connect_timeout 90;    
		proxy_send_timeout 90;    
		proxy_read_timeout 90;    
		proxy_buffer_size 4k;    
		proxy_buffers 4 32k;    
		proxy_busy_buffers_size 64k;    
		proxy_temp_file_write_size 64k;
		#proxy_ignore_headers "Cache-Control" "Expires";
		#proxy_pass_header Set-Cookie; 
		#expires 7d;
		#proxy_http_version 1.1;
	}
}
发表在 服务器 | 标签为 | 留下评论

【原创】CentOS6和CentOS7系统安装配置RabbitMQ

因为工作项目需要消息队列插件,今天安装RabbitMQ测试。

安装erlang

从CentOS7/6无依赖的erlang GitHub release 页面中下载安装包:
CentOs6下载 erlang-21.2.2-1.el6.x86_64.rpm
CentOs7下载 erlang-21.2.2-1.el7.centos.x86_64.rpm

其它版本 https://github.com/rabbitmq/erlang-rpm/releases

提示要签名key文件

GitHub release 页面中下载 rabbitmq-release-signing-key.asc

rabbitmq rpm安装包

在 rabbitmq-server 的 GitHub release 页面中选择合适的版本并选择适合的安装包,当前最新的release版本是3.7.15 (2019年5月),则:
CentOs6下载 rabbitmq-server-3.7.15-1.el6.noarch.rpm
CentOs7下载 rabbitmq-server-3.7.15-1.el7.noarch.rpm

安装

安装包准备好之后,我们来安装(yum命令需要root权限

# 安装 erlang
rpm -ivh erlang-21.2.2-1.el6.x86_64.rpm
# 导入签名
rpm --import rabbitmq-release-signing-key.asc
# 安装 rabbitmq
yum install -y rabbitmq-server-3.7.15-1.el6.noarch.rpm

安装遇到错误

[root@localhost src]# rpm -ivh erlang-21.2.2-1.el6.x86_64.rpm
warning: erlang-21.2.2-1.el6.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY
Preparing… ########################################### [100%]
file /usr/lib64/erlang/bin/epmd from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/erl from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/erlc from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/escript from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/run_erl from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/to_erl from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64
file /usr/lib64/erlang/bin/start from install of erlang-21.2.2-1.el6.x86_64 conflicts with file from package erlang-erts-R14B-04.3.el6.x86_64

卸载掉冲突的就可以了

[root@localhost src]# yum remove erlang-erts-R14B-04.3.el6.x86_64

确定Y,然后重新安装即可。

启动管理

## 服务管理命令
service rabbitmq-server start # 启动
service rabbitmq-server status # 状态
service rabbitmq-server stop # 停止
rabbitmq-plugins enable rabbitmq_management # 启用15672 web管理

## 常用命令
rabbitmqctl # 帮助
rabbitmqctl status # 状态 同上

rabbitmqctl stop # 停止服务 会将节点及应用程序同时关闭
# 由于同一节点可能运行除rabbitmq 其他erlang程序,停止整个节点是不可取的

rabbitmqctl stop_app # 保持25672不停
rabbitmqctl start_app # 启动5672 和 15672

## 用户管理
rabbitmqctl add_user admin admin# 添加用户admin
rabbitmqctl delete_user admin # 删除用户
rabbitmqctl change_password admin 123456# 修改密码
rabbitmqctl list_users # 查看用户列表
rabbitmqctl set_user_tags admin administrator # 赋予管理员权限

3.7.15 默认情况下guest用户只能localhost访问。

发表在 服务器 | 标签为 , | 留下评论

【原创】yii2使用GridView操作ActionColumn栏目根据权限设置显示或隐藏

yii2在使用GridView显示列表内容,最后操作栏目里面的查看、更新删除,根据后台设置路由权限自动显示或隐藏,查看源码后发现原来在\vendor\yiisoft\yii2\grid\ActionColumn.php文件里就有对应的属性可以设置了,例如需要判断按钮是否显示就可以设置visibleButtons属性以下红色部分代码即可。

[
	'class' => 'yii\grid\ActionColumn',
	//'template' => '{update} {delete}',
	'visibleButtons' => [
		'update' => \Yii::$app->user->can('buy/update'),
		'delete' => \Yii::$app->user->can('buy/delete'),
		'view' => \Yii::$app->user->can('buy/view'),
	],
	'buttons' => [
		'delete' => function ($url, $model) {
			return Html::a('    ',

				$url.'&'.http_build_query($model->toArray()),
				[
					//'class'=>'w1-action-del a_delete',
					'title' => Yii::t('yii', '删除'),
					'aria-label' => Yii::t('yii', '删除'),
					//'id'=>'a_delete',
					'data-pjax'=>0,
					'data-method'=>'post',
					'data-confirm' => '您确定要删除此项吗?'
				]
			);
		},
	],
],

Yii::$app->user->can是判断用户路由权限。

button的delete是我自定义的内容,可以不用理会。

发表在 服务器 | 标签为 | 留下评论

2019阿里云域名优惠口令(最新)

阿里云2019【优惠口令】
com英文域名续费:商标优选即买即用
cn英文域名注册:商标监控免费试用
cn英文域名续费:商标注册急速申报
xin域名注册:神来气旺
xin域名续费:抱诚守信

发表在 服务器 | 标签为 | 留下评论

mysql5.6一主多从有台从库并行复制同步错误

今天mysql 一主多从同步复制,有台从库查询状态show slave status\G;发现有错误。

Cannot execute the current event group in the parallel mode. Encountered event Format_desc, relay-log name .

网上查询后是Server version: 5.6.10-log版本并行复制导致bug,我还能说什么呢?暂时没时间去深入研究。

解决: 关闭并行复制

mysql> stop slave;
Query OK, 0 rows affected (0.07 sec)

mysql> set global slave_parallel_workers=0;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.17 sec)

再次查询同步正常了

发表在 服务器 | 标签为 | 留下评论

RockMongo管理MongoDB清空表释放磁盘空间

今天发现mongodb的数据库磁盘爆满了,需要清空一些表。使用的是RockMongo管理。

进入对应表点击清除按钮,确定后即可清空表数据,可是这时候磁盘的空间是没有被释放的。

在确认还有剩余磁盘空间等于删除后数据大小的情况下。

执行官方文档里面的命令

https://docs.mongodb.com/manual/reference/command/repairDatabase/#dbcmd.repairDatabase

{ repairDatabase: 1 }

选择对应需要修复的数据库,输入命令,点击代码执行,等待结果即可。

发表在 服务器 | 标签为 | 留下评论