Relative Content

K4NZDROID

category

「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

「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」- 搭建主从复制(基于位置复制)

第一步、修改配置(主库)
修改主库配置文件,以启用 binlog 功能:

[mysqld]
server_id = 26
log_bin = /var/log/mysql/binlog
binlog_format = ROW
expire_logs_days = 30
max_binlog_size = 500M
sync_binlog = 1

创建用于复制的用户,从库将使用该用户进行复制:

GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’%’ IDENTIFIED BY ‘XXXXXXXX’;

至此启动数据服务即可。
第二步、修改配置(从库)
从库配置文件:

[mysqld]
server_id = 27
relay_log = /var/log/mysql/relay_log

启动数据库服务。
第三步、启用从库复制

STOP SLAVE;

CHANGE MASTER TO master_host = ‘host’, master_port = ‘port’,
master_user = ‘username’, master_password = ‘password’,
master_log_file = ‘binlog file’, master_log_pos = ‘position’;

START SLAVE;[……]

READ MORE

「MySQL」- 搭建主从复制(基于 GTID 复制)

第一步、修改主库配置
主库配置文件:

[mysqld]
gtid_mode=ON
enforce-gtid-consistency=ON

log_bin = /var/log/mysql/binlog
binlog_format = ROW
expire_logs_days = 30
max_binlog_size = 500M
sync_binlog = 1

创建用于复制的用户,从库将使用该用户进行复制:

GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’%’ IDENTIFIED BY ‘XXXXXXXX’;

至此启动数据服务即可。
第二步、修改从库配置
从库配置文件:

[mysqld]
gtid_mode=ON
enforce-gtid-consistency=ON

启动数据库服务。在启动从库时,应该指定 –skip-slave-start 选项,因为此时从库还没有指定好复制参数。
第三步、启用从库复制

CHANGE MASTER TO master_host = ‘host’, master_port = ‘port’,
master_user = ‘username’, master_password = ‘password’,
MASTER_AUTO_POSITION = 1;

START SLAVE;

参考文献
MySQL 5.7 Reference Manual/Setting Up Replication Using GTIDs[……]

READ MORE

「MySQL」- 双主复制(基于GTID复制)

内容简介
所谓「双主复制」,其实就是“互做主从复制”。即每台master主机,既是master角色,又是slave角色。这样,任何一方所做的变更,都会通过主从复制到另一台主机的数据库中,以实现数据的一致性。这就是「双主复制」。
数据库复制有两种方式:基于GTID的复制;基于二进制日志位置的复制。本文讨论的前者「基于GTID的复制」。
系统环境

操作系统:
CentOS Linux release 7.4.1708 (Core)

软件版本:
MySQL 5.6.45

网络信息:
master-01: 10.10.50.115

 
master-02: 10.10.50.116

安装MySQL服务
(跳过,详细参考「MySQL 5.6 (CentOS 7)」一文)
配置服务
# On master-01

#!/bin/sh
################################################################################
# (0)创建必要的目录:
################################################################################
mkdir -pv /var/log/mysql/
chown mysql.mysql /var/log/mysql/

################################################################################
# (1)修改/etc/mysql/my.cnf文件:
# !!!发行版不同,配置位置也不相同,请不要照搬!请不要照搬!请不要照搬!
################################################################################
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup
cat <<MYCNF >> /etc/mysql/my.cnf
server_id = 1
auto-increment-offset = 1
auto-increment-increment = 2

log_bin = mysql-bin
binlog_format = MIXED[……]

READ MORE

「MySQL」- 双主复制(基于位置的复制)

内容简介
所谓「双主复制」,其实就是“互做主从复制”。即每台master主机,既是master角色,又是slave角色。这样,任何一方所做的变更,都会通过主从复制到另一台主机的数据库中,以实现数据的一致性。这就是「双主复制」。
数据库复制有两种方式:

基于GTID的复制
基于二进制日志位置的复制

本文讨论的后者「基于二进制日志位置的复制」,但是「基于GTID的复制」可能是更好的选择。
系统环境

属性
参数

操作系统:
CentOS Linux release 7.4.1708 (Core)

软件版本:
MySQL 5.6.45

网络信息:
master-01: 10.10.50.115

 
master-02: 10.10.50.116

第一步、安装数据库服务
参考 MySQL 5.6 (CentOS 7) 笔记,详细过程跳过。
配置服务
# On master-01

#!/bin/sh
################################################################################
# (0)创建必要的目录:
################################################################################
mkdir -pv /var/log/mysql/
chown mysql.mysql /var/log/mysql/

################################################################################
# (1)修改/etc/mysql/my.cnf文件:
# !!!发行版不同,配置位置也不相同,请不要照搬!请不要照搬!请不要照搬!
################################################################################
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup
cat <<MYCNF >> /etc/mysql/my.cnf
[mysqld]
server_id = 1
auto-increment-offset = 1
auto-inc[……]

READ MORE