第 二 十 六 天 :mysql 主 从 配 置

小Q:手把青秧插满田,低头便见水中天;身心清净方为道,退步原来是向前;

世间本来无一物,何必处处惹尘埃;

今天早早就起床了,宿舍送电送得早,于是制定了一个新时间表;不过本来预期的是把这一章看完了呢,不过因为中途解决问题总是会消耗大量的时间,所以还差一个重要知识点;

mysql主从配置:又称AB复制,官方用语replication;

主要是把 主 上的数据复制到 从 上;首先要把 主 打开,推送记录到 从 上;

A  --change data  --bin_log   ---->  B = repl_log  --change database

这需要两台机子;不过我们实验用一台机子就够了,而且还能练习一台机子如何装多个mysql

看了几篇文章,才明白主从配置又叫双机热备。。。。。

配置主从配置挺简单的,感觉我的还挺全,嘿嘿;推荐我看过的比较系统的文档

http://www.cnblogs.com/cchun/p/3712637.html

http://blog.chinaunix.net/uid-26610882-id-4083396.html

安 装:

删  除:    rm  -rf  /usr/local/mysql    /data/mysql

建用户: useradd   -s   /sbin/nologin  mysql

下 载 :  cd     /usr/local/src/                                     因为之前已经下过,所以这步可以略过了

wget  http://www.lishiming.net/data/attachment/forum/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz

tar   zxvf     /usr/local/src/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz

mv    mysql-5.1.40-linux-i686-icc-glibc23      /usr/local/mysql

配置文件:

cp   support-files/my-small.cnf     /etc/my.cnf                     上次我们拷贝的large文件,覆盖原文件

启动脚本:

cp   support-files/mysql.server    /etc/init.d/mysqld

添 加:basedir  =  /usr/local/mysql

datadir   =  /data/mysql

初始化:

./scripts/mysql_install_db   --user=mysql   --datadir=/data/mysql    成功后会在mysql下生成俩文件

启 动:

/etc/init.d/mysqld    start                  我在这启动失败,因为我没把以前进程关掉, kill  -9  进程号

安装第二个mysql:

cd    /usr/local                                cp   -r   mysql    mysql_slave

配置文件:

cp   /etc/my.conf     /usr/local/mysql_slave/                             这是一个大的区别

更 改 :

port = 3307

soket  =  /tmp/mysql_slave.sock

添 加 :datadir = /data/mysql_slave

初始化:                                                  成功后mysql_slave下有两个目录

. /scripts/mysql_install_db   --user=mysql   --datadir=/data/mysql_slave

启动脚本:

cd   /etc/init.d              cp   mysqld   mysqld_slave

编辑设置:

basedir  =  /usr/local/mysql_slave

datadir   =  /data/mysql_slave

搜索my.cnf

改   conf = etc/my.cnf     为    conf=$basedir/my.cnf

或   在datadir下一行添加  conf=$basedir/my.cnf    配置文件路径

启 动:/etc/init.d/mysqld    start

查 看:ps aux |grep mysql                    netstat -lnp | grep mysql

当理解这种配置方式后,我们就可以在一台机子上配置多个mysql服务了;

主从同步配置:随机选一个3306进程为主;3307为从

主 A : 建一个测试库

登 录:

mysql   -S    /tmp/mysql.sock              或  mysql   -h127.0.0.1    -p3306              登录3306

mysql   -S    /tmp/mysql_slave.sock  或  mysql   -h127.0.0.1    -p3307              登录3307

mysql的真实命令是/usr/local/mysql/bin/mysql,因为以前我们设置过path,所以可以直接用;

建 库 :create  database  db1;                                   注意分号

退 出 :quit   或  exit

拷贝一个库测试:

mysqldump    -S    /tmp/mysql.sock  mysql  >  123.sql               mysql库拷贝到123.sql

mysql        -S      /tmp/mysql.sock   db1    <   123.sql               库转到db1中

登录查看:

mysql   -S    /tmp/mysql.sock

use  db1;          >>>          show  tables;      >>>      quit

编辑配置:vim    /etc/my.cnf

打开    server-id  = 1                               随意指定,不跟 从 的id一样即可

log-bin  =  teng                           自定义,会在mysql目录下生成名字的文件

添加    binlog-do-db = db1,db2                白名单,允许同步这俩库

#binlog-ignore-db = db1              黑名单

重 启 :/etc/init.d/mysqld    restart

登 录 :

授权一个可以传输bin_log的用户,也可以多个;

grant    replication    slave   on   *.*        to    ‘repl‘@‘127.0.0.1‘    identified   by   ‘rep1‘;

授权      权限              从      on   所有文件  to  用户名@主机IP         密码;

flush   privileges;                            刷新权限

flush tables with read lock;              表锁为只读

show  master  status;                       读取 主 的一个状态


从:需要另开一个终端测试

编辑配置文件:  vim   /usr/local/mysql_slave/my.cnf

server-id     =  11                                           随意,跟主id不一样就行

也可以实现只同步哪个库,或不同步哪个库的功能;

创建库:

mysql   -S   /tmp/mysql_slave.sock   -e    "create database db1"

mysql   -S   /tmp/mysql_slave.sock   db1  <  123.sql

想要同步数据库,前提必须先有个一模一样的库;因为我们用的是一个主机,所以直接重定向就可以了;否则我们要把源文件库123拷过来,再传给新建的库db1;

登 录 : mysql   -S    /tmp/mysql_slave.soc

连 接 :  change master to  master_host=‘127.0.0.1‘, master_port=3306, master_user=‘repl‘, master_password=‘repl‘, master_log_file=‘teng.000001‘,master_log_pos=330;

后边的file和pos都需要根据主服务器的show  master  status中的数据写;

出现下行则配置成功

Query OK, 0 rows affected (0.09 sec)

打开 从 :

slave   start;

查 看:

show   salve  status\G;

这两行为yes则配置成功。

问题:

解决当法:http://www.jb51.net/article/48625.htm

测试主从:就是测试一下是否同步数据

主: mysql -S /tmp/mysql.sock      >>>    use  db1;  >>>    show   tables;

删 除:drop  table   proc;

从:mysql  -S  /tmp/mysql_slave.sock     >>>   use  db1;   >>>    show  tables;

或者去主中增加一个库·表,改动表中数据等;去从上都能看到;

注意:千万不要在 从 上建表,改动什么的,那样 主 在操作时会因为找不到 从 上对应的库,而发生紊乱的

这种机制很容易中断,因此我们要给他做个监控程序脚本,监听最重要的slave-io 和slave-sql 的状态,当不是yes的时候,马上发邮件或者短信给你;

关于log_bin日志 

  my.conf 文件中的[mysqld]标签下的log_bin指定日志文件,如果不提供文件名,mysql将自己产生缺省文件名。mysql会在文件名后面自动添加数字引,每次启动服务时,都会重新生成一个新的二进制文件。此外,使用log-bin-index可以指定索引文件;

使用binlog-do-db可以指定记录的数据库;使用binlog-ignore-db可以指定不记录的数据库。

而且,MySQL会将所有的数据库名称改成小写,在指定数据库时必须全部使用小写名字,否则不会起作用。以后对数据库每做的一次操作,都会在binlog中有所记录。

FAQ:

mysql> show slave status; 执行后部分结果如下

Slave_IO_State:Waiting for master to send event

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

查看数据库却依然无法同步,原因在哪里?

解决办法:

1) 尝试重启master数据库;

2) 在重启slave数据库之前,必须先删除data目录下的master.info文件,因为master.info记录了上次要连接主库的信息,如果不删除,即使my.cnf里进行了修改,手动修改Position(偏移量)也还是同步不了,因为读取的还是偏移量出错时的master.info文件信息。

# rm -f data/master.info

# support-files/mysql.server start

Starting MySQL.           [  OK  ]

再次查看slave,同步终于成功了。

mysql> show processlist;

id|User          |Host|db      |Command  |Time      |state

1| system user |       | NULL   | Connect |1196 | Waiting for master to send event

2 | system user |    | NULL   | Connect |-55692 | Slave has read all relay log; waiting for the slave I/O thread to

3 | root   |localhost|icinga| Query|  0 |NULL | show processlist

mysql> show slave status;命令,看到下面的显示结果

Slave_IO_Running:Connecting

Slave_SQL_Running:Yes

看到上面的问题,说明是从服务器无法正常连接到主服务器导致。原因一般和下面几种情况有关:

Iptables防护墙阻止了3306端口

主mysql服务器的grant授权命令有误

主mysql服务器的监听端口不是0.0.0.0:3306,导致别的服务器无法连接到主mysql

解决办法:

首先,关闭了iptables;

然后,检查主mysql服务器的grant授权命令,正确无误,这一点排除。

其次,查看主mysql的监听端口,默认是:::3306,不知道是否因为这个问题导致

修改主服务器的my.cnf文件,添加下面语句

bind-address = 0.0.0.0

重启mysq.server服务

再次netstat –an|more 查看3306端口,出现了0.0.0.0:3306,说明修改成功。

登录到从mysql服务器上,远程连接

# bin/mysql -h 192.168.123.75 -umysync -p123456

Your MySQL connection id is 8

Server version: 5.6.10-log Source distribution

mysql>

连接成功。

最后重新执行主从操作:

主mysql服务器:mysql> show master status;

从mysql服务器:mysql> stop slave;

从mysql服务器:mysql> change master to……;

从mysql服务器:mysql> start slave;

从mysql服务器:mysql> show slave status;

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

再次测试主从同步,成功。

时间: 2024-12-27 17:56:06

第 二 十 六 天 :mysql 主 从 配 置的相关文章

马哥学习笔记二十六——MySQL主从复制

配置MySQL复制基本步骤: 一.master 1.启用二进制日志 log-bin = master-bin log-bin-index = master-bin.index 2.选择一个惟一server-id server-id = {0-2^32} 3.创建具有复制权限的用户 REPLICATION SLAVE REPLICATION CLIENT 二.slave 1.启用中继日志 relay-log = relay-log relay-log-index = 2.选择一个惟一的server

26、蛤蟆的数据结构笔记之二十六串应用之建立词索引表

26.蛤蟆的数据结构笔记之二十六串应用之建立词索引表 本篇名言:"生命是一条美丽而曲折的幽径,路旁有妍花的丽蝶,累累的美果,但我们很少去停留观赏,或咀嚼它,只一心一意地渴望赶到我们幻想中更加美丽的豁然开朗的大道.然而在前进的程途中,却逐渐树影凄凉,花蝶匿迹,果实无存,最后终于发觉到达一个荒 漠.-- 萨拉" 1.  信息检索 信息检索是计算机应用的重要领域之一.为了提高图书馆数目检索的效率,建立书名关键词索引,可以实现读者快速检索书目的自动化,即读者根据关键词索引表,读者可以方便查询到

MYSQL进阶学习笔记十六:MySQL 监控!(视频序号:进阶_35)

知识点十六:MySQL监控(35) 一.为什么使用MySQL监控 随着软件后期的不断升级,myssql的服务器数量越来越多,软硬件故障的发生概率也越来越高.这个时候就需要一套监控系统,当主机发生异常时,此时通过监控系统发现和处理. 这个监控实际上是在我们的开发完成之后,这个时候软件就开始在运行,这个运行我们就需要去关注到mysql服务器是否正常,那么我们要观察它就需要给它提供一些监控,这监控就是当它发生故障之后, 那么我们这个监控就会告诉我们到底什么地方发生了一些异常或者一些错误,这个时候我们就

Powershell管理系列(二十六)PowerShell操作之批量导出&导入邮箱

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 项目中有时候做跨林邮箱迁移的时候,条件不成熟,比如安全考虑或者其他考虑,不能做双林信任,这样就提出了一个问题,历史邮件需要使用的话怎么办,一个简单高效的解决办法就是从源森林批量导出邮件为.pst文件,在批量导入到目的域森林,具体操作如下: 1.赋予管理账号邮件导入导出权限,命令如下: cls whoami New-Manageme

攻城狮在路上(叁)Linux(二十六)--- linux文件系统的特殊查看与操作

一.boot sector 与 super block的关系: 1.boot sector用于存放引导装载程序,占用1024个字节. 2.super block的大小也为1024字节. 3.若block大小为1k,则boot sector和super block各占一个block. 4.若block大于1K(2K/4K)时,则两者都位于第一个block中. 二.磁盘空间的浪费问题:暂不考虑. 三.利用GUN的parted命令进行分区行为: 因为fdisk不支持高于2TB的分区. 命令格式: pa

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

二十六:Struts2 和 spring整合

二十六:Struts2 和 spring整合 将项目名称为day29_02_struts2Spring下的scr目录下的Struts.xml文件拷贝到新项目的scr目录下 在新项目的WebRoot---->WEB-INF目录下新建一个目录lib,用于存放jar包(Struts2和spring整合所需jar包) 将项目名称为day29_02_struts2Spring,WebRoot---->WEB-INF下的lib目录下的所有jar包拷贝到新项目对应的位置,同时将spring的配置文件appl

企业搜索引擎开发之连接器connector(二十六)

连接器通过监视器对象DocumentSnapshotRepositoryMonitor从上文提到的仓库对象SnapshotRepository(数据库仓库为DBSnapshotRepository)中迭代获取数据 监视器类DocumentSnapshotRepositoryMonitor在其构造方法初始化相关成员变量,这些成员属性都是与数据获取及数据处理逻辑相关的对象 /** This connector instance's current traversal schedule. */ pri

【Unity 3D】学习笔记二十六:unity游戏脚本(六)

在3D游戏世界中,任何一个游戏对象在创建的时候都会附带Transform(变换)组件,并且该组件是无法删除的,也不应该删除.在unity中,Transform面板一共有3个属性: Position  (位置) Rotation(旋转) Scale(缩放) 这三个值都是用来调整游戏对象在游戏界面中的位置,状态等相关参数. Position  (位置) 任何一个游戏对象的三维坐标都保存在Vector3容器中,该容器记录对象在X轴,Y轴,Z轴的坐标.一旦Vector33容器中的坐标发生变化,那么Sce