MySQL同步实现细节

翻译自MySQL 5.5 Reference Manual

MySQL同步是使用三个线程实现的,一个在主服务器上,两个在从服务器上:

  • 二进制日志转储线程(Binlog dump thread)。当从服务器连接时,主服务器创建一个线程用来把二进制日志的内容发给从服务器。在主服务器SHOW PROCESSLIST的输出信息中,它被显示为Binlog Dump。
    binlog dump线程在主服务器的二进制文件上取得一个锁(acquires a lock),用来读取每一个要发给从服务器的事件。读取事件后,锁便会被释放,而不管事件有没有发送给从服务器。
  • 从服务器I/O线程(Slave I/O thread)。当从服务器运行START SLAVE语句时,会创建一个I/O线程。这个I/O线程会连接主服务器,要求主服务器发送记录在二进制日志中的数据库更新信息。
    从服务器的I/O线程读取主服务器Binlog Dump线程发过来的数据库更新信息,并把它们拷贝到本地文件,也就是从服务器的中继日志(relay log)中。
    这一线程的状态,在SHOW SLAVE STATUS的输出信息中显示为Slave_IO_running,在SHOW STATUS的输出信息中显示为Slave running。
  • 从服务器SQL线程(Slave SQL thread)。从服务器读取I/O线程生成的中继日志,并执行包含在日志中的事件。

在上面的描述中,每个主/从服务器连接都有3个线程。如果一个主服务器有多个从服务器,它会给每个连接着的从服务器都创建一个binlog dump线程。每一个从服务器都有自己的I/O和SQL线程。

继续阅读

Visits: 481

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

为MySQL生成SSL证书和密钥

MySQL支持SSL通信,不过需要自行生成所需要的证书和密钥。

生成过程中请根据提示提供相应的信息。如果证书只是用来测试,一路回车即可;如果在实际环境中使用,尽量提供有意义的信息。如果某个信息要留空,可以输入英文句号(.)。请自行保存生成过程中所输入的证书密码。

1 准备工作

创建干净的环境:

$ rm -rf newcerts
$ mkdir newcerts && cd newcerts

2 生成CA证书

需要注意,CA证书的Comman Name不能与服务器请求文件和客户端的请求文件的Comman Name相同,否则证书验证阶段会报类似“error 18 at 0 depth lookup:self signed certificate”的错误。命令如下:

$ openssl genrsa 2048 > cakey.pem
$ openssl req -new -x509 -nodes -days 3600\
 -key cakey.pem -out cacert.pem

继续阅读

Visits: 2496

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

设置MySQL数据库同步

严格说来,MySQL的数据库同步不能叫“同步”,因为它是单向的,只能从主服务器(master)到从服务器(slave),官方文档称之为“replication(复制)”。

通过同步,可以自动备份数据库到另一台机器;可以负载均衡,把写操作放在主服务器,读操作分散在从服务器;还可以在主服务器故障时,临时进行切换,故障排除后再切回来……当然,本文不会说这么多内容,涉及到的,只是如何设置同步。

1 系统环境

1.1 主服务器

Debian7,MySQL5.5。MySQL使用MyISAM存储引擎,关闭InnoDB存储引擎。

若用到InnoDB的数据库,其同步设置会有差异,本文不涉及。mysql -u root -p登入数据库,然后执行SHOW TABLE STATUS FROM database查看database数据库使用何种存储引擎。

1.2 从服务器

Debian7,MySQL5.5。MySQL使用MyISAM存储引擎,关闭InnoDB存储引擎。

2 准备工作

2.1 主服务器设置

编辑/etc/mysql/my.cnf,在[mysqld]部分,根据下面内容添加或修改相应选项。

 继续阅读 

Visits: 493

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

网站迁移到linode

BuyVM让我郁闷了两次:

  1. 6月26日,机房断电,服务中断8小时左右;
  2. 7月初Stallion 2上线,我修改了一下启动设备,却导致VPS重启后找不到启动设备;

再加上非电信线路由于网络原因基本无法访问VPS并维护,毅然决然切换到linode。

不过迁移后空闲出来的VPS也不会白白放在那里浪费资源,可以把它作为备用服务器,以备不时之需。现正研究MySQL数据库同步,成功后会写篇文章出来。

Visits: 195

发表在 杂记 | 留下评论

深入解析硬盘结构

1.1 硬盘的外部结构

一般硬盘正面贴有产品标签,主要包括厂家信息和产品信息,如商标、型号、序列号、生产日期、容量、参数和主从设置方法等。这些信息是正确使用硬盘的基本依据,下面将逐步介绍它们的含义。

硬盘主要由盘体、控制电路板和接口部件等组成,如图1-1所示。盘体是一个密封的腔体。硬盘的内部结构通常是指盘体的内部结构;控制电路板上主要有硬盘BIOS、硬盘缓存(即CACHE)和主控制芯片等单元,如图1-2所示;硬盘接口包括电源插座、数据接口和主、从跳线,如图1-3所示。

harddisk_structure_indepth_01
图1-1 硬盘的外观

harddisk_structure_indepth_02
图1-2 控制电路板

harddisk_structure_indepth_03
图1-3 硬盘接口

继续阅读

Visits: 539

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

硬盘结构

追溯历史

从1956年9月,IBM的一个工程小组向世界展示了第一台磁盘存储系统IBM 350 RAMAC(Random Access Method of Accounting and Control)至今,磁盘存储系统已经历了近半个世纪的发展。经历了这45年,磁盘的变化可以说是非常巨大得,最早的那台RAMAC容量只有5MB,然而却需要使用50个直径为24英寸的磁盘。但现在一块容量高达100GB的硬盘只需要3张磁盘片即可。
当然,IBM 350 RAMAC与现在的硬盘有很大的差距,它只能算是硬盘的开山鼻祖。现代硬盘的真正原形,可以追溯到1973年,那时IBM公司推出的Winchester(温氏)硬盘,它的特点是:“工作时,磁头悬浮在高速转动的盘片上方,而不与盘片直接接触。使用时,磁头沿高速旋转的盘片上做径向移动”,这便是现在所有硬盘的雏形。今天高端硬盘容量虽然高达上百GB,但它却仍然没有脱离“温彻斯特”的动作模式。
下面是两张IBM公司于1980年在IBM-XT上的一块10M的硬盘图,可以看出,除了外型略大,无论外观还是内部结构和现在最先进的硬盘并无大的差别。

harddisk_structure_01

图1:IBM 10MB硬盘的内部结构图

继续阅读

Visits: 572

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

解决Windows下Firefox无法启动问题

1 问题及解决

今天打开电脑,习惯性运行Firefox,但却不显示浏览器窗口,只看到进程里面有firefox.exe。

先尝试以安全模式启动Firefox,方法是按住shift启动Firefox,或加-safe-mode参数运行firefox.exe。如果可以正常启动,说明是某个扩展、主题、或插件导致其无法启动,可从最近安装的扩展、主题、或插件入手排查。

若安全模式无法启动,或启动后依然不正常(例如窗口假死),可加-p参数运行firefox.exe,打开配置文件管理器,新建一个配置文件然后启动Firefox。启动后把原配置文件中的重要数据拷贝到新配置文件中即可。

2 配置文件中的重要数据和它们对应的文件

2.1 首选项

  • prefs.js

该文件存储了您在Firefox里设置的所有首选项,包含about:config与选项中(与about:config一致,加了个UI而已)的所有设置。

  • user.js

该文件默认不存在。你可以通过新建该文件,以与prefs.js相同语法来便捷地配置首选项。点击这里可以查看该文件怎么写。 继续阅读

Visits: 389

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

Ubuntu13.04下让宏碁Aspire4750G屏幕亮度可调节

1 问题描述及解决

装好Ubuntu 13.04,想用Fn+快捷键调节屏幕亮度,只能看到屏幕亮度指示器的信息条产生变化,屏幕亮度却未发生改变,一直保持最高亮度。

解决方法很简单,用编辑器打开/etc/default/grub,找到GRUB_CMDLINE_LINUX=""一行,改为:

GRUB_CMDLINE_LINUX="acpi_osi=Linux acpi_backlight=video"

其实就是给内核传递了acpi_osi=Linux和acpi_backlight=video两个启动参数。然后更新grub启动菜单:

update-grub

最后重启电脑。

2 说明

acpi_backlight=
有两个可选的值,video和vendor。若使用vendor,偏好特定厂商的驱动(例如thinkpad_acpi,、sony_acpi等等),不使用ACPI的video.ko驱动。
4750G使用vendor会有两个问题:屏幕关闭再打开亮度自动变到最高;使用快捷键调节亮度时屏幕亮度指示器显示不正确。
acpi_osi=
修改受支持的操作系统界面列表字符串。
acpi_osi="string1"    #添加string1——只能一个字符串(string)
acpi_osi="!string2"    #移除内置的string2
acpi_osi=        #禁用所有字符串

3 参考文档

3.1 Screen Brightness not adjustable for Acer Aspire S3

3.2 内核文档kernel-parameters.txt(在内核源代码压缩包里)

Visits: 274

发表在 Linux | 标签为 | 一条评论

VIM中文显示设置

1 问题描述及解决

系统locale是zh_CN.UTF-8,用了我以前的配置文件,终端下运行VIM却出现乱码情况。互联网搜索一番,发现解决方案其实很 简单,在vimrc里面设置好encoding、fileencoding、termencoding的值即可。
我原始配置文件关于CJK支持方面的设置如下(非原创):

" Multi-encoding setting, MUST BE IN THE BEGINNING OF .vimrc!
if has("multi_byte")
  " When 'fileencodings' starts with 'ucs-bom', don't do this manually
  "set bomb
  set fileencodings=ucs-bom,utf-8,cp936,taiwan,japan,korea,latin1
  " CJK environment detection and corresponding setting
  if v:lang =~ "^zh_CN"
    " Simplified Chinese, on Unix euc-cn, on MS-Windows cp936
    set encoding=cp936
    set termencoding=cp936
    if &fileencoding == ''
      set fileencoding=cp936
    endif
  elseif v:lang =~ "^zh_TW"
    " Traditional Chinese, on Unix euc-tw, on MS-Windows cp950
    set encoding=taiwan
    set termencoding=taiwan
    if &fileencoding == ''
      set fileencoding=taiwan 继续阅读 

Visits: 424

发表在 编辑器 | 标签为 | 留下评论

Debian的Apache配置文件结构

系统环境,Debian 7.0。翻译自/etc/apache2/apache2.conf注释。

Debian中Apache 2网页服务器的配置文件结构与其上游软件(原本的Apache软件)所建议的方式有很大不同。这是由于Debian默认的Apache 2安装试图让模块、虚拟主机,以及额外的配置指令的添加和移除尽可能灵活,以便让服务器的更改和管理变得更加简单。

配置文件被分割开来,形成了一个层次结构(见下),所有配置文件都放在/etc/apache2/目录中。

/etc/apache2/
|-- apache2.conf
| `-- ports.conf
|-- mods-enabled
| |-- *.load
| `-- *.conf
|-- conf.d
| `-- *
`-- sites-enabled
`-- *

继续阅读

Visits: 451

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