Linux常用软件编译安装过程

依次为 nginx , php, redis, memcached, mysql 在CentOS下的安装。

nginx 安装:
下载:
wget https://nginx.org/download/nginx-1.14.2.tar.gz

# nginx 安装依赖
yum -y install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel

tar -zxf nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure –prefix=/user/local/nginx/nginx-1.14.2
make && make install
mkdir /user/local/nginx/nginx-1.14.2/conf/sites # 改下配置文件,站点配置放到这里

配置文件 php-fpm 配置:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 自定义的PHP文件目录,这里一定要改为 $document_root为根目录
include fastcgi_params;
}

启动:
/user/local/nginx/nginx-1.14.2/sbin/nginx # 直接启动
/user/local/nginx/nginx-1.14.2/sbin/nginx -s reload # 重新加载配置(配置改过后使之生效)
/user/local/nginx/nginx-1.14.2/sbin/nginx -s stop # 停止

==============================================================

==============================================================

php 安装:
下载:
wget http://hk1.php.net/get/php-7.2.13.tar.gz/from/this/mirror
mv mirror php-7.2.13.tar.gz

# php 安装依赖
yum -y install curl-devel libpng-devel libicu-devel libxslt libxslt-devel libxml2 libxml2-devel

tar -zxf php-7.2.13.tar.gz
cd php-7.2.13
./configure –prefix=/usr/local/php/php-7.2.13 –with-config-file-path=/usr/local/php/php-7.2.13/etc –with-config-file-scan-dir=/etc/php-7.2.13 –enable-fpm –with-fpm-user=www –with-fpm-group=www –with-openssl –with-zlib –enable-bcmath –enable-ftp –with-gd –enable-intl –enable-mbstring –with-mysqli=mysqlnd –enable-mysqlnd –enable-opcache –enable-pcntl –with-pdo-mysql=mysqlnd –enable-soap –enable-sockets –enable-zip –with-curl –with-xmlrpc –with-xsl
make && make install
cp php.ini-product /usr/local/php/php-7.2.13/etc/php.ini

启动:
/usr/local/php/php-7.2.13/sbin/php-fpm # 启动
kill -USR2 [php-fpm的进程ID] # 重启
kill -9 [php-fpm的进程ID] # 强制停止

==============================================================

==============================================================

redis 安装
下载:
wget http://download.redis.io/releases/redis-5.0.2.tar.gz

安装
tar -xzf redis-5.0.2.tar.gz
cd redis-5.2.0
make
make PREFIX=/usr/local/redis-5.2.0 install # PREFIX 要大写
cp redis.conf /usr/local/redis-5.2.0

启停:
/usr/local/redis/redis-5.0.2/bin/redis-server & # 启动
redis-cli -p 端口号 shutdown # 关闭

==============================================================

==============================================================

memcached 安装
下载:
wget http://www.memcached.org/files/memcached-1.5.12.tar.gz

安装:
yum -y install libevent-devel
tar -zxf memcached-1.5.12.tar.gz
cd memcached-1.5.12
./configure –prefix=/usr/local/memcached/memcached-1.5.12 –enable-64bit
make && make install

启停:
/usr/local/memcached/memcached-1.5.12/bin/memcached -d -u nobody -P 端口 # 启动
kill -9 进程ID # 停止

==============================================================

==============================================================

mysql 安装
下载:
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar

# mysql 安装依赖
rpm -qa|grep mariadb
rpm -e mariadb-libs-5.5.56-2.el7.x86_64 –nodeps // 如果有mariadb,先卸载否则冲突
yum -y install perl libaio

tar -xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
mkdir mysql-5.7.24-1.el7.x86_64.rpm-bundle
mv mysql-common-* mysql-5.7.24-1.el7.x86_64.rpm-bundle
cd mysql-5.7.24-1.el7.x86_64.rpm-bundle

软件安装:
rpm -ivh mysql-community-common-5.7.24-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.24-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.24-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.24-1.el7.x86_64.rpm

初始化:

创建数据目录:
mkdir -p /data/mysql/data # 数据目录
mkdir -p /data/mysql/log # 日志目录

编辑配置文件:
—————————————————————-
vi /etc/my.cnf
port=33061 # 修改端口
datadir=/data/mysql/data # 指定数据目录
log-error=/data/mysql/log/mysqld.log # 指定日志路径

default-storage-engine=INNODB
character-set-server=utf8mb4
—————————————————————-

初始化数据库:
mysqld –initialize # 初始货完毕后,必须要改掉数据目录和日志目录的权限
更改目录权限:
chown mysql:mysql -R /data/mysql/data
chown mysql:mysql -R /data/mysql/log

启动Server:
systemctl start mysqld.service
#systemctl restart mysqld.service # 重启
#systemctl stop mysqld.service # 停止

找初始密码:
cat /data/mysql/log/mysqld.log

切换root密码:
# mysql -uroot -p[输入密码]
mysql> SET PASSWORD = PASSWORD(‘xxxxxxx’); — 必须改

创建高等级用户:
mysql> GRANT all privileges ON *.* to ‘root’@’%’ identified by ‘xxxxxxxxxxx’;
mysql>flush privileges;
mysql>exit;

发表在 linux, mysql, PHP | 留下评论

CentOS7 设置静态IP

使用ip命令

先看下DHCP的网关配置:
# ip route
ip route
default via 10.10.20.1【网关地址】 dev enp0s3 proto static metric 100
10.10.20.0/24 dev enp0s3 proto kernel scope link src 10.10.20.21 metric 100

看下DHCP的DNS配置
# cat /etc/resolv.conf
nameserver 202.101.172.35
nameserver 218.108.248.200

看下IP配置文件是哪个:
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3【IP配置文件名】: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:f1:eb:57 brd ff:ff:ff:ff:ff:ff
inet 10.10.20.21/24【当前IP地址】 brd 10.10.20.255 【广播地址】 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::202f:31d2:ee6e:fc42/64 scope link noprefixroute
valid_lft forever preferred_lft forever

编辑IP配置文件:
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

添加以下内容
ONBOOT=yes # 启动时自动启用网络连接
BOOTPROTO=static # 静态IP方式 (原来是dhcp)
IPADDR=10.10.20.21 # 静态IP
PREFIX=24 # 子网掩码 或 NETMASK=255.255.255.0 #子网掩码
BROADCAST=10.10.20.255 # 广播地址
GATEWAY=10.10.20.1 #设置网关 必须和IP地址同一网段

配置nameserver,否则无法访问公网
# vi /etc/resolv.conf
重启网络后原来DHCP获取的信息会被清掉,重新添加下:
nameserver 202.101.172.35
nameserver 218.108.248.200

重启网络
service network restart

发表在 linux | 留下评论

Fabric2.4 脚本使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#coding:utf-8
'''
fabric 是一个python的基于ssh的部署工具包,用来实现对服务器的批量自动部署操作。 例如:有15台线上服务器,可以通过写一个脚本让这15台机器执行一批命令,实现自动部署。

Fabric 2.x 与 1.x 版本有所区别,适用版本: Python(2.7,3.4+)。

以下为示例:

fabfile.py
'''


from invoke import task # 任务模块
from fabric import Config # 配置模块
from fabric import Connection # 连接模块
from fabric import SerialGroup, ThreadingGroup # 组模块,顺序执行组,同时执行组

'''
用task把一个函数定义成任务。
:param Context c 上下文参数,这个参数在Fabric 2.x的任务函数中是必须的。
'''

@task
def hello(c):
print('hello world!')

'''
从命令行接收参数并执行
:param Context c
:param String message
'''

@task
def say(c, message):
print('You sad: "'+ message +'"')

'''
在单个服务器上执行命令
'''

@task
def ahost(c):
config = Config({'sudo':{'password':'123456'}}) #为sudo设置密码
cnt = Connection(host='127.0.0.1', port='22', user='nece001', connect_kwargs={'password':'123456'}, config=config)
cnt.run('echo "This is on Remoter:"') # 在目标服务器上执行命令
cnt.run('uname')
cnt.run('pwd')
cnt.sudo('whoami', user='root') # 在目标服务器上用root执行命令

#本地操作
print("\r\n")
cnt.local('echo "This is on Local:"') # 在本地执行命令
cnt.local('whoami')
cnt.close()

'''
在一批服务器上执行命令
'''

@task
def batch(c):
# 组织服务器组
cnts = [
Connection(host='127.0.0.1', user='nece001', port='22', connect_kwargs={'password':'123456'}),
Connection(host='127.0.0.1', user='wayne', port='22', connect_kwargs={'password':'123123123'}),
Connection(host='127.0.0.1', user='tome', port='22', connect_kwargs={'password':'234234234'})
]
print('serial:')
g = SerialGroup.from_connections(cnts) # 一组服务器,按服务器顺序执行(如果有执行顺序要求的时候用)
g.run('whoami')
print('\r\nThread:')
g = ThreadingGroup.from_connections(cnts) # 一组服务器,多个服务器同时执行
g.run('whoami')
g.close()

'''
命令行执行:
fab -l #查看可执行的任务列表。
fab hello #执行hello任务。
fab say "你好 啊" #执行say任务,并指定参数内容。
fab ahost # 执行单个服务器处理任务
fab batch # 执行批量服务器处理任务
'''
发表在 linux, python | 标签为 , , | 留下评论

Kettle 使用记录

  1. 转换:在kettle转换中设置了变量,但是在后续的步骤中引用该变量不起作用?
    原因:是因为转换中的所有步骤都是并行运行的,没有特定的执行顺序。也就是说,设置的变量在当前转换里是不起作用的。解决:方法是在job里将设置变量作为一个前置的转换,然后将引用该变量的转换作为后置转换。
    kettle设置变量不起作用
  2. 作业:作业中的转换文件是否可以使用相对路径?
    转换文件名:必须填写,填写路径可以是绝对路径或者相对路径,本实例中是指定相对路径,通过Kettle自带的变量${Internal.Job.Filename.Directory}。
    参考:【Kettle从零开始】第六弹之Kettle作业流程使用
    补充:为什么往HDFS写会把kettle路径加进去,目前原因不明。处理:清理data-integration/system/karaf/caches目录,但每次运行前都要清理。(出自Kettle交流群)
  3. 空字符串更新/插入不允许NULL字段的时候报:Column ‘XXXXX’ cannot be null
    原因:默认情况下,kettle认为空字符串=NULL
    解决:找到kettle.properties文件,在文件中增加一行:KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y
    windows: 在C:\Users\用户名\.kettle目录中
    linux: 在~/.kettle目录中
  4. MYSQL时间字段出现:Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp
    解决:数据连接->选项->参数 中增加:(有这种字段的连接都要加)
    名:zeroDateTimeBehavior 值:convertToNull
    kettle Mysql处理timestamp数据格式数据异常
  5. 组件:值映射:可以根据某字段的值映射出一个新字段。
  6. 新建数据库连接,设置选项 characterEncoding:utf8mb4,提示:Unsupported character encoding ‘utf8mb4’.
    先设置选项:characterEncoding:utf8,然后去高级项目中的 -> 请输入连接成功后要执行的SQL:set names utf8mb4;
    参考:https://blog.csdn.net/bohai0409/article/details/38072465

根据系统时间获取数据:

发表在 mysql, 其它 | 标签为 , , | 留下评论

突破

想要突破?先装个蓝灯再说。:)

https://github.com/getlantern/lantern

 

注:windows版本的下载解压出来的需要自己在文件上加个.exe

发表在 其它 | 标签为 , | 留下评论

准备建立数据仓库

相关软件:

  1. mysql 用于存放数据
  2. otter 用于同步数据(主要用于多个数据库实例合并)
  3. kettle 用于数据ETL(主要用于数据抽取)
    kettle下载:https://community.hds.com/docs/DOC-1009855(去下边的Download里找下载连接)
    mysql驱动:https://dev.mysql.com/get/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.41.tar.gz

发表在 mysql | 标签为 , | 留下评论

otter 安装过程记录

本次操作的目的是将多个实例的数据库合并到一个实例中去,为查询统计数据提供方便。

本文的操作系统是CentOs 7.

确定机器上已安装java. 如没有则先安装:
> yum install java-1.8.0-openjdk.x86_64

1。下载必要软件,这三个都是直接解压后就可运行。

http://mirrors.hust.edu.cn/apache/zookeeper/ — 下载最新的稳定版本
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

https://github.com/alibaba/otter/releases — 下载otter的manager 和 node,下载最新的稳定版本
wget https://github.com/alibaba/otter/releases/download/v4.2.15/manager.deployer-4.2.15.tar.gz — 下载manager
wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql — manager的mysql数据库结构
wget https://github.com/alibaba/otter/releases/download/v4.2.15/node.deployer-4.2.15.tar.gz — 下载node

2.官方参考文档:
https://github.com/alibaba/otter/wiki
https://github.com/alibaba/otter/wiki/QuickStart — 快速开始

3。安装MYSQL,将源数据库已有的数据导入到目标库中。在源库中执行otter-manager-schema.sql,建好otter数据库。建议不要放在同步目标数据库里。

4。解压
解压后的目录结构 /data/soft/zookeeper/zookeeper-3.4.13
/data/soft/otter/manager.deployer-4.2.15
/data/soft/otter/node.deployer-4.2.15

> tar -zvxf zookeeper-3.4.13.tar.gz
> tar -zvxf manager.deployer-4.2.15.tar.gz -C manager.deployer-4.2.15 – 解压到指定目录,要先把目录建好
> tar -zvxf node.deployer-4.2.15.tar.gz -C node.deployer-4.2.15 – 解压到指定目录

5.运行 zookeeper
复制配置文件:> cp zookeeper-3.4.13/conf/zoo_sample.cfg zookeeper-3.4.13/conf/zoo.cfg
修改配置:> vi zookeeper-3.4.13/conf/zoo.cfg
修改内容:
dataDir=/data/soft/zookeeper/data # 目录要先建好
dataLogDir=/data/soft/zookeeper/log
其它配置全部用默认

启动:> ./zookeeper-3.4.13/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/zookeeper-3.4.13/bin/../conf/zoo.cfg
Starting zookeeper … STARTED

> netstat -na | grep 2181 看下zookeeper启动了没有

6.运行otter的manager
先确定otter-manager-schema.sql已在数据库执行完毕,otter库已经建好。
运行SQL的时候如果出现错误:
ERROR 1067 (42000): Invalid default value for ‘GMT_CREATE’
就打开otter-manager-schema.sql文件,
把全部的
`GMT_CREATE` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00’
替换为:
`GMT_CREATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
这是因为mysql的sql_mode参数不允许timestamp类型的字段有0值出现造成的。

给otter库单独建一个帐号。
CREATE USER ‘otter’@’127.0.0.1’ IDENTIFIED BY ‘123456’;
GRANT all privileges ON otter.* TO ‘otter’@’127.0.0.1’;
flush privileges;

修改配置文件:> vi ./manager.deployer-4.2.15/conf/otter.properties
otter.domainName = xxx.xxx.xxx.xxx # 修改为正确访问ip(内网访问配置内网地址外网访问配置外网地址)
otter.port = 8081 # 修改http端口,允许公网访问的还是改下吧

otter.database.driver.username = otter # 改为安装了otter库的mysql的帐号
otter.database.driver.password = 123456 # 改为真实密码
otter.zookeeper.cluster.default = 127.0.0.1:2181 # 改为zookeeper的IP和端口,这里用默认因为zookeeper在同一机器上并且保持了默认设置

启动:./manager.deployer-4.2.15/bin/startup.sh
> netstat -na | grep 8081 看下manager启动了没有

问题:
1.启动失败提示:otter Service Unavailable # zookeeper没启动造成,或manager设置的zookeeper地址或端口不对.

7.配置otter的node,先不启动
修改配置文件:> vi ./node.deployer-4.2.15/conf/otter.properties
otter.manager.address = 127.0.0.1:1099 # manager所在机器的正确地址和端口,因为这里在同一台机器所以用默认

8。在manager中进行单向同步配置.
manager启动成功后,用浏览器打开地址: http://xxx.xxx.xxx.xxx:8081 # 在manager的otter.properties配置好的,如果打不开看下防火墙的端口是不是开了。
右上角点击登录图标,登录。默认帐号和密码是:admin:admin

8。1 zookeeper 添加
菜单:机器管理 -> zookeeper管理 -> 按钮:添加

表单填写,必填项
集群名字:# 填写一个明确的名字,如:本地zookeeper
ZooKeeper集群:127.0.0.1:2181; # 因为manager与zookeeper在同一台机器所以用本地IP(最后的分号不要漏掉)
保存

保存时可能出现的问题:
1。http error 500 problem accessing # otter的表所在库数据库没有写入权限,更改mysql帐号权限重启manager。
2。HTTP ERROR 500 #数据库帐号权限问题

Problem accessing /channelList.htm. Reason:

Failed to invoke Valve[#2/3, level 3]: com.alibaba.citrus.turbine.pipeline.valve.PerformTemplateScreenValve#4f3356c0:PerformTemplateScreenValve

8。2 node 添加
添加前,要确保zookeeper已启动。
菜单:机器管理 -> node管理 -> 按钮:添加

表单填写
机器名称:#有node.deployer-4.2.15的机器算为一个node,为这台机器起个名字
机器IP:10.81.83.130 # 对应node节点将要部署的机器ip,如果有多ip时,可选择其中一个ip进行暴露. (此ip是整个集群通讯的入口,实际情况千万别使用127.0.0.1,否则多个机器的node节点会无法识别)
机器端口:2088 # 对应node节点将要部署时启动的数据通讯端口,建议值:2088
下载端口:9090 # 对应node节点将要部署时启动的数据下载端口,建议值:9090
外部ip :对应node节点将要部署的机器ip,存在的一个外部ip,允许通讯的时候走公网处理。因为是内网这里留空。
zookeeper集群:选上一步建好的zookeeper
保存

保存完毕后,在列表里看下序号是几。我这里是1,按官方说的:
写入node的id文件:
> echo 1 > ./node.deployer-4.2.15/conf/nid # 多个node协同工作时不能重复

此时本条node记录的状态是:未启动

8.3 node 启动
> ./node.deployer-4.2.15/bin/startup.sh
然后刷新node管理列表,看下状态。正常情况下应该是:已启动

可能的问题:
如果状态不是已启动,看node的日志:
> vi ./node.deployer-4.2.15/logs/node/node.log

8。4 数据源配置
菜单:配置管理 -> 数据源配置 -> 按钮:添加

说明;这里用于配置源数据库和目标数据库。

表单填写:
数据源名字:给源或目标数据库起个名。源数据库(主库 master),目标数据库(从库 Slave)
用户名:mysql可用的帐号
密码:mysql帐号密码
URL:jdbc:mysql://10.20.144.15:3306 # 源或目标库的IP和端口
编码:与指定的数据库的默认编码一致。

验证下数据源:恭喜,数据库通过验证! — 表示成功

保存

8。5 数据表配置
菜单:配置管理 -> 数据表配置 -> 按钮:添加

说明:这里设置源或目标数据库要同步的表。如果源库已有表和数据,要先把现有的数据导入目标库,否则报错。

表单填写:
schmea name:要同步的数据库名,如果要同步多个库可用正则表达式:(a库|b库|c库…)
table name:要同步的表名,如果要同步多个表可用正则表达式:.*或(a表|b表|c表…)
数据源:选择源或目标数据源.

8.6 canal配置
菜单:配置管理 -> canal配置 -> 按钮:添加

说明:配置去主库复制数据的canal。

表单填写:
canal名称:起名
数据库地址:10.51.21.252:3306; # 填写主库IP与端口
数据库帐号:
数据库密码:
其它默认
保存

8.7 同步管理配置(把主从库关联起来的步骤)
8.7.1 新建Channel
菜单:同步管理 -> 按钮:添加

表单填写:
Channel Name:起名
其它默认
保存

8.7.2 Pipeline管理
点击 Channel名字 -> 按钮:添加

表单填写:
Pipeline名字:起名
Select机器:数据来源的Node机器 —– 离源mysql近的应为select机器,离目的mysql近的应为load(如果两个node选择的不一样的特别是异地的,安装aria2工具(在node节点之间提供文件传输通道)。)
Load机器:被同步的Node机器
Canal名字: 对应select机器的canal(即用于主从同步的canal)
其它默认
保存

8.7.3 映射关系列表
点击 Pipeline名字 -> 按钮:添加

说明:建立源库与目标库之间的映射关系。

表单填写:
源数据表:源数据库的数据源配置(主库 master)
目标数据表:目标数据库的数据源配置(从库 slave)
保存

8.7.4 启用Channel
菜单:同步管理 -> 启用

8.7.5 查看运行情况
菜单:监控管理 -> 日志记录,根据日志查看错误情况

问题处理:
1。pid:1 nid:1 exception:canal:测试库canal:com.alibaba.otter.canal.parse.exception.CanalParseException: Unsupported BinlogFormat STATEMENT
第一步:主库的binlog_format必须设置为Row.

第二步:把zookeeper停止,并把它的日志删除掉。[./zkServer.sh stop]
清掉manager所有数据表的内容(除帐号表),重启manager和node。
重新配置所有manager的内容。
然后,好了
关键,不知道问题点在哪里

2。DuplicateKeyException: PreparedStatementCallback; SQL [update `xxx`.`xxx_table` set `id` = ? where ( `id` = ? )]; Duplicate entry ‘785748’ for key ‘PRIMARY’;
2.1 先停止channel
2.2 到 channel管理 > Pipeline > 同步进度 菜单下,删除【position 状态】
2.3 编辑下canal的【位点自定义设置】,保存
2.4 重新启动channel。

后记:

问题:
1.canal elapsed 92450 seconds no data
node 停了,要去node/bin/stop.sh node/bin/startup.sh 重启下。

2.Problem accessing /channel_list.htm. Reason:

Failed to invoke Valve[#2/3, level 3]: com.alibaba.citrus.turbine.pipeline.valve.PerformTemplateScreenValve#4f3356c0:PerformTemplateScreenValve
可能是与node有关。清掉node数据重新添加。

3.pipeline 超长延时:
可能是因为源库里的SQL语句有错误造成。(这次是找出哪个库导致的,直接把库重新导入了。)

A:故障;node未找到.

原因:node机器添加完成后,跳转到机器列表页面,获取对应的机器序号nid,node节点对应的唯一标示

B:故障:Unsupported BinlogFormat MIXED
show variables like ‘%log%’;后binlog_format值仍为MIXED
原因;my.cnf下有多余binlog_format赋值MIXED

C:故障:channel挂起,从库未同步主库表数据。(解决方案同DDL语句不能执行故障Exception: no support ddl for)
解决方案;在otter的管理界面,点击同步管理,停用Channel,点击进入Pipeline==>管理=>最下面高级=>跳过ddl异常。重启就OK了

 

坑:

  1. otter CanalParseException: parse row data failed.
    最新canal版本已解决,但是不是稳定版,建议otter降级处理。
    4.2.15 必现~
    https://github.com/alibaba/otter/issues/441
发表在 mysql | 标签为 , , | 留下评论

网易博客日志列表文件转RSS格式

杯具了!

用PHP将网易导出XML转RSS。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
&lt;?php
// 网易博客日志列表文件转RSS格式。
$src = '网易博客日志列表.xml';
$dst = 'dst.xml';

echo 'loading...', "\r\n";
$dom = new DOMDocument('1.0', 'utf8');
$dom-&gt;formatOutput = true;
$rss = $dom-&gt;createElement('rss');
$dom-&gt;appendChild($rss);
$channel = $dom-&gt;createElement('channel');
$rss-&gt;appendChild($channel);
$channel-&gt;appendChild($dom-&gt;createElement('title', '网易博客日志'));
$channel-&gt;appendChild($dom-&gt;createElement('link', 'http://blog.163.com'));
$channel-&gt;appendChild($dom-&gt;createElement('description', '网易博客日志列表'));

$doc = simplexml_load_file($src);
$blogs = $doc-&gt;children();
foreach($blogs as $blog){
$article = $dom-&gt;createElement('item');
$channel-&gt;appendChild($article);

$items = get_object_vars($blog);
foreach($items as $key=&gt;$value){
switch($key){
case 'title':
$title = $dom-&gt;createElement('title');
$title-&gt;appendChild($dom-&gt;createCDATASection($value));
$article-&gt;appendChild($title);
break;
case 'className':
$class_name = $dom-&gt;createElement('title');
$class_name-&gt;appendChild($dom-&gt;createCDATASection($value));
$article-&gt;appendChild($class_name);
break;
case 'content':
$description = $dom-&gt;createElement('description');
$description-&gt;appendChild($dom-&gt;createCDATASection($value));
$article-&gt;appendChild($description);
break;
case 'publishTime':
$pubDate = $dom-&gt;createElement('pubDate', date(DATE_RSS, substr($value, 0, 10)));
$article-&gt;appendChild($pubDate);
break;
}
}
}

$dom-&gt;save($dst);
echo 'ok.', "\r\n";

 

下载:163blog_xml_to_rss

发表在 PHP | 标签为 | 留下评论

MySql 清理binlog

今天发现查询执行被卡住,发现是磁盘被binlog占满了,遂清理之。
purge binary logs to ‘master-binlog.000001’;
purge binary logs to ‘master-binlog.000002’;
purge binary logs to ‘master-binlog.000003’;
purge binary logs to ‘master-binlog.000004’;
……
show binary logs;
执行的时候,执行失败(因为磁盘满了,无法写入记录,会被卡住)。
使用:echo ”>最老的一个binlog文件,清空一个binlog文件给腾出点空间。
然后再执行清理语句,mysql查询恢复正常。
发表在 mysql | 标签为 , | 留下评论

输入帐号/密码进入Win服务器上的共享目录

net use \\win-server\tmp /del
net use \\win-server\tmp *  /user:win-server\user1 /persistent:yes

start \\win-server\tmp
——————————————————————————————————————-

在运行中输入“\\”+IP或者计算机名。都可以直接访问共享。
cmd访问方法:
c:\>net use \\192.168.1.1 123 /user:abc
192.168.1.1是服务器的IP。123是密码。abc是用户名。这条命令是登录服务器用的
c:\>net view \\192.168.1.1
这条命令是用来查看共享的

清除共享访问用户名和密码的方法:
打开cmd.
c:\>net use * /del
就可以直接清除所有的共享连接和密码

发表在 windows | 标签为 | 留下评论