「Linux」- 将 JPG 网页转为字符画

这里要介绍的是一个有趣的命令,将图片转化为字符画。输入一张图片,生成类似于下面的字符画:

jp2a -i –height=32 /tmp/zhe-shi-shui-jia-de-logo.jpg | sed ‘s/^/# /’
#
#
#
#
#
#
#
#
#
#
#
#
# cxkd; .:;.
# xKKKKKc .xKKKKd
# ‘KKKKKKO .OKKKKKKc
# . .OKKKKKo .KKKKKK0′
# .o0K0x, .d0K0l c0KKKk’
# dKKKKKK; . … .okOko’
# .0KKKKKKl .,,. OKKKKK0,
# ,,,,,,,,,,’. ,,,. cKKKKK0′ .o0KKKKOc .KKKKKKKc …………….. …….:oo,……
# .OOOOOOOOOOOOk: .OOOc ‘ldo:. ,OKKKKKKKKk’ kKKKKK0′ dOOOOOOOOOOOOOOOO..OOkxxxxxxxxxxxxxx.
# .OOOl……,kOO; ……… ”’. ,xKKO,,dKKKKK0d..:odoc. .””’;kOOo””’. .OOc’lxxc;;;;oxx:;
# .OOOc ,kOO, .OOOOOOOOOkl. .OOOc .cOKOxxl lOO0KK0OOd’ ‘OOkxxxxxxxxxkOOc .OOc’lOOl,,,,oOO:,
#[……]

READ MORE

「ImageMagick」- 在图片上添加文字(批量操作)

问题描述
我们有百张图片,需要将文件名添加到图片上,那实际上就是如何向多张图片添加文字。我们并不懂得 Photoshop 之类的图片处理软件该如何操作。
该笔记将记录:如何通过命令行批量为文件添加文本(文本内容则是文件名,当然你也可以替换为其他内容)
解决办法
关键命令

TEXT=”Some Text”
convert -font helvetica -undercolor Black -fill blue -pointsize 36 \
-draw “text 15,50 ‘$TEXT'” \
input.jpg ouput.jpg

# -font – 指定字体文件路径
# -undercolor – 指定字体区域背景色
# -fill – 指定字体颜色
# -pointsize – 字体大小
# -draw – 要绘制的文本
# input.jpg – 原图
# ouput.jpg – 输出图片

批量操作

for file_name in $(/bin/ls)
do
convert -font helvetica -undercolor Black -fill blue -pointsize 36 \
-draw “text 15,50 ‘$file_name'” “$file_name” “${file_name}-with-txt”
done

参考文献
How to Write Text On Image using Linux Command How to add a background color to drawn text[……]

READ MORE

「Linux」- 视频播放器

本部分将介绍可以在 Linux 中使用的视频播放器,以及常见视频处理方法。
相关链接
How video streaming works on the web: An introduction | by Paul Berberian | CANAL+ TECH | Medium[……]

READ MORE

「Linux」- 视频播放器

解决方案
VLC media player
Totem Movie Player
Apps/Videos/Documentation – GNOME Wiki!
在 GNOME Desktop 中,默认视频播放器。 官网地址:https://wiki.gnome.org/Apps/Videos

apt-get install totem*

# Ubuntu 20.04 LTS
# https://askubuntu.com/questions/214421
apt install libdvdnav4 libdvdread7 libdvd-pkg \
gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly # 添加多种视频格式解码支持

# 01/04/2020 当播放相同 MP4 视频时,我们观察到该应用的 CPU 占用比 VLC 要高(未经严格测试,仅观察到该现象)
SMPlayer
视频播放器,是MPlayer的前端,界面基于QT开发。 官网地址:http://smplayer.sourceforge.net/
参考文献
13 Best Open Source Video Players For Linux in 2019

章节列表
「LINUX」- SMPlayer | 视频播放器 「VLC」- 视频播放器,常见问题处理[……]

READ MORE

「LINUX」- SMPlayer | 视频播放器

问题描述
该笔记将记录:在 Linux 中,与 SMPlayer 相关的内容,以及常见问题的解决办法。
解决方案
WIP
特性特征
与 VLC 相比,SMPlayer 停止播放后,不会出现 CPU 占用较高的情况;
安装程序

# Ubuntu 20.04 LTS
apt-get install smplayer

常见问题处理
视频播放在独立的窗口中
18.04 – SMplayer Plays Video in Separate Window with no controls – Ask Ubuntu
1)Option > Preferences > General > Video (tab) 2)Output driver > User defined… > x11 (Inputbox)[……]

READ MORE

「VLC」- 视频播放器,常见问题处理

问题描述
该笔记将记录:在 Linux 中,与 VLC 相关的内容,以及常见问题的解决方案。
解决方案
开源跨平台便携的多媒体播放器和流媒体服务器。 官网地址:http://www.videolan.org/vlc/ 支持平台:Linux、Windows、MacOSX、IOS、Android
常见问题处理
当停止视频播放后,CPU 使用率依旧很高
VLC use alot of CPU during paused state (#2656) · Issues · VideoLAN / VLC · GitLab
通过 ROOT 运行
在默认情况下,使无法以 ROOT 用户运行 VLC 播放器。但是也并非毫无办法,还有回旋的余地。该笔记将介绍几种以 ROOT 运行 VLC 的方法。
方法一、最快捷的方法

# 首先,运行如下命令以修改 VLC 二进制程序:
cp /usr/bin/vlc /usr/bin/vlc.backup
sed -i ‘s/geteuid/getppid/’ /usr/bin/vlc

# 然后,运行 vlc 命令启动即可:
vlc

注意事项,(1)每次 VLC 升级后,需要重新执行上述命令修改程序,(2)并且如果 VLC 程序代码发生调整,该方法可能失效。
方法二、重新编译(推荐)
在编译时,指定 –enable-run-as-root 选项,详细编译方法可以参考 BLFS/VLC-3.0.8 文档。
在 configure 时,添加 –enable-run-as-root 选项:

./configure –prefix=/usr \
–disable-opencv \
–disable-vpx \
–enable-run-as-root

注意事项:如上示例摘录自网络,。我们并没有编译过,因为我们没有以 ROOT 用户登录系统::-)
参考文献
VLC media player – Wikipedia How to Install and Run VLC Media Player as Root in Linux Beyond Linux® From Scratch (System V Edition) – Version 2020-01-03 / Chapter 44. Video Utilities / VLC-3.0.8[……]

READ MORE

「Videos」- 从视频网站提取下载链接

解决方案
LOL电影天堂 | https://www.993dy.com/

var linkList = “”
$x(‘//input[contains(@value , “thunder://”)]’).forEach(function(input){linkList+=input.value})
console.log(linkList)

电影天堂 | http://www.k1k.cc/
在 Console 中,使用如下代码,直接执行以提取页面的 .mp4 下载链接:

list=””
$x(“//a[contains(text(), ‘S10E’) and contains(@href, ‘magnet:’)]”).forEach(
element => list = list + decodeURI(element.href) + ‘\n’
)
console.log(list)

使用如下 Shell 代码进行下载(或者,复制到其他下载工具中):

list=””
$x(“//a[contains(@title, ‘本地下载’) and contains(@href, ‘.mp4’)]”).forEach(
element => list = list + decodeURI(element.href) + ‘\n’
)
console.log(list)

decodeURI:这里的代码通常在 Console 中执行,如果行过长将显示省略号,导致链接无法使用。所以使用 decodeURI 的方式来缩短。
XVIDEOS | https://www.xvideos.com
通过 TemperMonkey 脚本(./xvideos-axel.js)直接生成 axel 下载链接。
参考文献
xvideos download linker[……]

READ MORE

「Videos」- 爬取电影天堂全部下载链接

问题描述
我们有 4T 磁盘,我们不想让它成为闲置资源,何必让他空闲呢,我们想要把它装满,我们应该用什么装满呢?我们可以用视频资源把它填满。所以,我们需要电影网站的爬虫,以到各大电影网站获取下载链接,并完成电影下载(所谓囤货,虽然我们不一定会看;此外,家中宽带也不会闲置)。
但是,我们不想写爬虫(编码),所谓爬虫写得好,桔子进的早。另外,爬虫需要调试,需要针对不同的页面编写不同的提取代码。(当然,如果需要学习使用 Python 爬虫,可以考虑通过这种方法来完成任务)
此外,爬取下载链接并不是最困难的部分,真正困难的地方是电影下载。因为视频资源的有无、视频资源的数量等等因素,都会影响到我们的下载,决定我们的下载是否成功。比如,电影天堂的 FTP ( ftp://d062.dygod.com ) 从来都是无法直接访问,但是迅雷可以下载(可能是迅雷服务器的下载缓存吧)
所以,最后我们决定,仅仅爬取电影的下载链接,而下载任务交由迅雷来处理。(当然,这里面会有一些失效的链接、无法下载的链接,但是这么多资源的链接,谁还在乎有几千个失效的链接呢?)
该笔记将记录:汇总爬取电影天堂电影下载链接的方法,以及相关问题处理。
解决方案
我们能想到的方法大致有以下几种:
方案一、使用 Python 爬虫
这是我们最先想到的方案,也是作为后端开发首先能想到的方法。但是,我们没有使用该方案(正如文章开始着的那样),主要原因就是不想编码,编码还要调试,挺麻烦的。(当然,有人喜欢通过编码的方式来解决这个问题,或者学习 Python 爬虫,可以考虑通过这种方式来解决问题。网上有很多类似的资料,这里我们就不再赘述)
方案二、HTTrack + Grep
我们使用 HTTrack 镜像站点,然后使用 grep 命令过滤出全部下载链接(ftp、magnet)
# 01/10/2021 我们放弃该方案:因为我们并不想学习 httrack 的用法,毕竟镜像站点的需求比较少;并且已经很久没有更新;(总之,针对该问题,我们可以找到各种不使用 httrack 的理由)
方案三、Wget + Grep
我们使用 Wget 镜像站点,然后使用 Grep 过滤出全部下载链接(ftp、magnet)。该方法与 HTTrack + Grep 方案相同,只是改为使用 Wget 这个我们经常使用的工具。(此外,我们还可以得到电影天堂的镜像站点,算是意外收获)
# 01/10/2021 这是我们最终采用的方案,另辟蹊径,简单可操作。当然该方案也有局限性,比如:在爬取的过程中不能动态更换 User Agent 请求头;无法进行数据的解析处理;等等。
方案三、Wget + Grep
第一步、爬取整个站点的全部页面:[……]

READ MORE

「Linux」- 下载 Youtube 视频

解决方案
首先要保证我们能访问 Youtube 站点,不然一切都徒劳,这个工具只是为了离线观看。
第一步、安装工具

# Kali GNU/Linux Rolling
apt-get install youtube-dl

第二步、视频下载

youtube-dl url-to-video

参考文献
11个让你吃惊的 Linux 终端命令[……]

READ MORE

「Youku」- 视频下载

Youku | 自动发送弹幕

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

async function doSomeStuff() {
// do some stuff …
for (;;) {
$x(“//div[@id=’barrage-controller’]//input”)[0].value = 123123
$x(“//div[@id=’barrage-controller’]//button[contains(text(), ‘发送’)]”).click()

// take a break …
console.log(‘Taking a break…’);
await sleep(2000);
console.log(‘Two seconds later, showing sleep in a loop…’);
}
}

doSomeStuff();[……]

READ MORE

「bilibili」- 视频下载

提取视频集合标题
v0.0.1

var titleList = “”
$x(‘//div[@class=”link-content”]’).forEach((element) => {titleList = titleList + element.innerText.replace(“\n”, “-“) + “\n”})
console.log(titleList)

v0.1.0
在脚本中使用:

var cmds = “”
document.getElementById(“multi_page”).getElementsByClassName(“list-box”)[0].getElementsByTagName(“a”).forEach(function(element){
// cmds += “touch ‘” + element.getElementsByClassName(“page-num”)[0].innerText + ” ” + element.title + “.flv'” + “\n”
cmds += element.getElementsByClassName(“page-num”)[0].innerText + ” ” + element.title + “\n”
})
console.log(cmds)

v1.0.0(DEPRECATED)

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

async function waitDownloadLink() {
var shellCommands = “”

// 1、找到所有的视频
var videoList = document.getElementById(“multi_page”).getElementsByClassName(“list-box”)[0].getElementsByTagName(“a”)

// 2、生成所有视频的链接
videoList.forEach(function(aTag){
// 视频信息
var videoLink = aTag.href
var videoName = aTag.getElementsByClassName(“page-num”)[0].innerText + ” ” + aTag.title + “.flv”
console.log( videoLink + “, ” + videoName)

// 3、加载页面,捕获地址,生成命令[……]

READ MORE

「JavaScript」- 加快网页视频播放速度

对于 HTML5 播放器,设置 <video> 属性:

/* play video twice as fast */
document.querySelector(‘video’).defaultPlaybackRate = 2.0;
document.querySelector(‘video’).play();

/* now play three times as fast just for the heck of it */
document.querySelector(‘video’).playbackRate = 3.0;

defaultPlaybackRate* (float): The playback speed at which the video should be played playbackRate* (float): The current playback speed: 1.0 is normal, 2.0 is two times faster forward, -3.0 is three times faster backwards and so on
参考文献
几种方式加速网页视频播放速度[……]

READ MORE

「Linux」- 录屏软件,Screencast

Peek(for Linux,正在使用)
整个就比较厉害了,可通过通过调整窗口来选择录制区域的区域的大小,而窗口是透明的,「Record As GIF」开始录制,「Stop」结束录制,支持的输出格式有 GIF\APNG\WebM\MP4,如图:

可能在发行版的源中没有直接提供 Peek 的包,需要去 GitHub 下载源码,然后自己编译,官方给出了各发行版的编译手册,我只在 Debian 下编译过 Peek;
EV 录屏(for Windows,正在使用)
https://www.ieway.cn/evcapture.html
EV 录屏软件操作简单,轻松易上手;内存占用率低,CPU 消耗小;不限时间、不限大小,想录多久就录多久;轻松添加水印,给视频贴上专属标签;录制高清的教学视频,支持多级别音频采集;录制电影的原声,直接从声卡中取出高清音频数据;支持各大主流游戏,可同时采集麦克风音频和声卡;原声,音频高保真!
OBS Studio
OBS Studio – Wikipedia
Gifine
带有 GUI 的 GIF 录制软件,有关细节可以参考 GitHub 中的 Gifine项目;
Byzanz
终端型的 GIF 录制软件,没有 GUI 界面。可以到 Gnome 的 Git 仓库下载该项目源码中;
Silentcast
另外一个带有 GUI 的 GIF 录制软件,相关的介绍可以参考该项目在 GitHub 的主页;
ScreenCast + Convert
使用屏幕录制软件,然后在由视频软件(ffmpeg)转成 GIF 图;
参考文献
Wikipedia/Screencast Wikipedia/Comparison of screencasting software 收藏!盘点B站UP主用的录屏软件! – 知乎[……]

READ MORE

「Peek」- GIF 录制工具(Linux)

Peek 是个屏幕录制软件,但是可以录制 GIF 图片;
安装程序
通过仓库安装

# Ubuntu
add-apt-repository ppa:peek-developers/stable
apt update
apt install peek

通过源码安装
如果在发行版的源中没有直接提供 Peek 的包,需要去 GitHub 下载源码,然后自己编译,官方给出了各发行版的编译手册,Debian 的编译如下:

# 1. 安装依赖
apt install cmake valac libgtk-3-dev libkeybinder-3.0-dev libxml2-utils gettext txt2man

# 2. 下载源码、编译、安装
git clone https://github.com/phw/peek.git
mkdir peek/build
cd peek/build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DGSETTINGS_COMPILE=OFF ..
make && make install

# 3. 运行
peek

补充说明
有关其他发行版的编译及安装可以参考源码目录下的 README.md 文件;
使用方法
整个就比较厉害了,可通过通过调整窗口来选择录制区域的区域的大小,而窗口是透明的,「Record As GIF」开始录制,「Stop」结束录制,支持的输出格式有 GIF\APNG\WebM\MP4,如图:
常见错误列表
(peek:9282): GLib-GIO-ERROR **: Settings schema ‘com.uploadedlobster.peek’ is not installed
参考文献
GitHub/peek[……]

READ MORE

「Videos」- 开源视频管理系统,视频网站,搭建属于自己的视频站点

问题描述
我们需要「视频管理系统」来管理我们下载的电影,作为自建视频网站,用于日常的视频播放、观影休闲。(我们没有选用家庭影院方案,因为我们希望在电脑上可以直接通过网页打开播放。基于 Web 的视频管理系统是最贴近我们需求的工具)
因此,我们创建该笔记,用来整理部分“比较好用的”(能够满足我们需求的)视频管理系统。
补充说明
1)该笔记记录的软件多用于搭建视频站点,通常不能作为家庭影院的解决方案; 2)如果要搭建家庭影院,参考 Home Media Solutions 笔记。
解决方案
最开始我们想使用国外的视频管理系统,但是后来经过查找,还是国内的比较好。因为国内的系统集成多种采集插件: 苹果 cms 官方蓝奏网盘(适合萌新) https://www.lanzous.com/u/magicblack 飞飞 cms 官网 https://www.feifeicms.org 另一个飞飞 cms http://www.ffcms.cn 赤兔 cms 官网 http://www.ctcms.cn 海洋 cms 官网(不建议使用) https://www.seacms.net/index.php 赞片 cms 官网 https://www.zanpiancms.com movcms 官网 https://www.movcms.com 雷风 cms http://www.lfdycms.com 魅思 cms http://www.msvod.cc 马克思 cms http://www.makesicms.com 米酷 cms https://micool.net 晴天 cms http://www.qingtiancms.com/movie
“苹果 CMS”(MACCMS)、“帝国 CMS”、“织梦 CMS”、“飞飞 CMS”,其中,我们被安利 “苹果 CMS”,那就用 “苹果 CMS” 吧;
方案一、苹果 CMS(MACCMS)
第一步、部署 MACCMS10 系统
下载地址:https://github.com/magicblack/maccms_down
安装方法:类似于其他 PHP CMS 系统(这里不再赘述)。
第二步、配置 Nginx 反向代理
使用如下 Nginx 配置(其中,webadmin.php 是 admin.php(由于安全原因 admin.php 被重命名))

server {
listen 80;
server_name videos.k4nz.com;
root /srv/maccms10/;
index index.php index.html index.htm;

location /asdfas[……]

READ MORE

「bc」

安装的可执行程序
bc,is a command line calculator
dc,is a reverse-polish command line calculator
参考文献

Homepage: http://ftp.gnu.org/gnu/bc

章节列表
「bc」-[……]

READ MORE

「e2fsprogs」

E2fsprogs,包含了用于处理EXT2文件系统的程序。同时也支持EXT3和EXT4类型的文件系统。
安装
从发行版的源中安装

#!/bin/bash

# Ubuntu 16.04.2 LTS
apt-get install e2fsprogs

从源码中编译安装 参考LFS/E2fsprogs-1.43.1: http://www.linuxfromscratch.org/lfs/view/7.10/chapter06/e2fsprogs.html
安装的可执行程序文件
badblocks Searches a device (usually a disk partition) for bad blocks
chattr Changes the attributes of files on an ext2 file system; it also changes ext3 file systems, the journaling version of ext2 file systems
compile_et An error table compiler; it converts a table of error-code names and messages into a C source file suitable for use with the com_err library
debugfs,A file system debugger; it can be used to examine and change the state of an ext2 file system
dumpe2fs Prints the super block and blocks group information for the file system present on a given device
e2freefrag Reports free space fragmentation information
e2fsck Is used to check, and optionally repair ext2 file systems and ext3 file systems
e2image Is used to save critical ext2 file system data to a file
e2label 显示或更改给定设备上存在的ext2/ext3/ext4文件系统上的文件系统的标签。
e2undo Replays the undo log undo_log for an ext2/ext3/ext4 filesys[……]

READ MORE

「inetutils」

Inetutils,包含了基本的网络程序。
安装

#!/bin/bash
./configure –prefix=/usr \
–localstatedir=/var \
–disable-logger \
–disable-whois \
–disable-rcp \
–disable-rexec \
–disable-rlogin \
–disable-rsh \
–disable-servers

make

make install

包含的命令列表
dnsdomainname,Show the system’s DNS domain name ftp,ftp客户端程序。
hostname 用户报告和设置hostname。
ifconfig 管理网络接口接口。
ping Sends echo-request packets and reports how long the replies take
ping6 A version of ping for IPv6 networks
talk 用于和其他用户聊天。
telnet,TELNET协议接口。
tftp 一个简单的文件传输程序。
traceroute 用于追踪数据包到另一台主机所经过的网关。
参考文献

LFS/6.39. Inetutils-1.9.4
Inetutils Homepage
Inetutils Online Manual[……]

READ MORE

「lftp」

lftp
lftpget

章节列表
「lftpget(1)」-[……]

READ MORE

「sendmail」

editmap queries and edits sendmail map files.
hoststat prints sendmail’s persistent host status.
mailstats displays sendmail statistics.
mailq prints a summary of outbound mail messages waiting for delivery.
makemap creates sendmail map files.
newaliases rebuilds /etc/mail/aliases.db from the contents of /etc/mail/aliases.
praliases displays current sendmail aliases.
purgestat causes sendmail to clear (purge) all its host-status information.
sendmail is the sendmail mail transport agent.
smrsh is a restricted shell for sendmail.
vacation is an email auto responder.
参考文献

http://www.sendmail.org[……]

READ MORE

「zip」

安装的可执行程序
zip compresses files into a ZIP archive.
zipcloak is a utility to encrypt and decrypt a ZIP archive.
zipnote reads or writes comments stored in a ZIP file.
zipsplit is a utility to split ZIP files into smaller files.
参考文献

BLFS/Zip-3.0[……]

READ MORE

「MySQL」- ERROR 1146: Table ‘xxxx’ doesn’t exist

问题描述
在执行SELECT语句时,数据库返回1146 – Table ‘v_portal.qrtza_triggers’ doesn’t exist错误。
问题原因
这种问题有很多原因。首先,你要确定表是存在的。
在我们场景中,数据表是存在的,只是「查询语句的表名」与「数据库的表名」大小写是不一致,因此出现问题。
解决办法
数据库的表名大小写是个神奇的问题。
要处理我们的问题,需要修改lower_case_table_names变量。将其设置为lower_case_table_names=1即可。
该变量是全局的,且不能动态修改,只能写入配置文件。只有0、1、2三种取值。值为0表示,不管是定义还是比较都是大小写敏感的;值为1表示,在定义时以小写存储,在比较时大小写不敏感;值为2表示,以定义进行存储,在比较时使用小写。
附加说明
该属性要在建表之前打开。在MariaDB 10.1.29中,测试结果如下:

(1)将lower_case_table_names=0后,以“Foo”建表,再将lower_case_table_names=1后:

SELECT * FROM Foo => 成功
SELECT * FROM foo => 失败

(2)将lower_case_table_names=1后,以“Foo”建表,保持lower_case_table_names=1后:

SELECT * FROM Foo => 成功
SELECT * FROM foo => 成功

(3)将lower_case_table_names=1后,以“Foo”建表,再将lower_case_table_names=0后:

SELECT * FROM Foo => 失败
SELECT * FROM foo => 成功

对于场景(1)分析:虽然官方文档说「设置为1时,表明以小写存储,在比较时不是大小写敏感的」,但是依据情况推测「在比较时,只是将查询语句的表名转为小写」 对于场景(2)分析:该场景容易理解 对于场景(3)分析:在创建后,表名以小写存储。当lower_case_table_names=0后,使用大写表名语句查询,自然会失败。
对于已经创建的表,可以通过REANME语句来转换大小写。
参考文献
MySQL Server Administration/The MySQL Server/Server System Variables/lower_[……]

READ MORE

「MySQL」- cannot be converted from type x to type y

问题描述
在 MySQL 主从复制时,产生如下错误:

Column 0 of table ‘database_name.table_name’ cannot be converted from type ‘int’ to type ‘bigint(20)’

根据提示是int类型无法转换为bigint类型,但是原因是什么?
系统环境

属性
参数

MySQL
Master-Master Replication

SELECT @@version;
5.7.20-log

SELECT @@binlog_format;
ROW

SELECT @@slave_type_conversions;
 

问题原因
首先,数据库的SQL语句是执行成功后,才写入二进制日志中的。
# 在我们的场景中
这也是推测出来:当时主库的二进制日志还没有完全同步到从库,我们对从库的字段进行了修改,从int修改为bigint类型。并且数据库没有设置slave_type_conversions属性,因此主从之间不允许类型转换。二进制日志为ROW格式,而二进制日志中的字段为int类型,但是目标中为bigint类型。
另外我们开启了log_slave_updates属性,但是从库的binlog中并没有找到来自主库的记录。
解决办法
从int转换为bigint是无损的,所以可以进行slave_type_conversions=ALL_NON_LOSSY设置。
或者不要在二进制日志同步期间进行这些操作。其实还是要懂数据库里的一些细节上的东西。
然而,事情向来不会这么简单。在「ERROR 1677: Column of table cannot be converted from type varchar(0) to type varchar(20)」一文中,作者通过执行REPAIR TABLE修复了该问题。
参考文献
5.2.4.2. Setting The Binary Log Format 16.1.6.3 Replication Slave Options and Variables/slave_type_conversions Row-based replication: attribute promotion and demotion. Type conversion modes (slave_type_conversions varia[……]

READ MORE

「MySQL」- errno: 24 – Too many open files

内容简介
处理errno: 24 – Too many open files错误的办法。
问题描述
就是遇到了errno: 24 – Too many open files错误。
问题原因
该错误由于打开文件数受限制导致的。
执行语句SHOW GLOBAL VARIABLES LIKE ‘open_files_limit’;查看允许打开的文件数,在我的系统里1024个。
该参数open_files_limit是只读的,所以SET GLOBAL open_files_limit = 65536;是无效的。
解决办法
解决办法很简单就是:修改允许打开的文件数。
但是不同的系统有不同的做法,主要是systemd和SysV init之间的差别。我这里只介绍systemd中的处理方法。系统环境为CentOS Linux release 7.4.1708 (Core)发行版。
# 修改配置
执行systemctl edit mysqld.service命令,输入如下配置:

[Service]
LimitNOFILE=65536

然后,保存退出(通常是VIM编辑器)。由于是通过systemctl edit执行修改,因此不需要执行systemctl daemon-reload命令。
# 重启服务
最后,重启MySQL服务:systemctl restart mysqld.service
# 附加说明
如果你是通过设置/etc/systemd/system.conf文件中的DefaultLimitNOFILE=infinity参数来解决该问题,那如果要让配置生效,需要执行systemctl daemon-reexec命令。但是不建议修改该配置文件,因为它是全局的,除非你知道自己在做什么。
参考文献
How to fix “too many open files” in MySQL? MySQL: Too many open files (24) BUT open_files has not reached open_files_limit? reboot or “systemctl daemon-reload” for changes to /etc/systemd/system.conf?[……]

READ MORE

「MySQL」- MHA

官方文档
GitHub/yoshinorim/mha4mysql-manager/Wiki[……]

READ MORE

「MyCat」- 数据库分库分表中间件

官方站点:http://www.mycat.io
权威指南:http://www.mycat.io/document/mycat-definitive-guide.pdf[……]

READ MORE

「2.Quick Start」

[……]

READ MORE

「MyCat」- 管理与配置

[……]

READ MORE

「4.Security」

[……]

READ MORE

「5.Performance」

[……]

READ MORE