mysql主从复制相信已经用得很多了,但是由于工作原因一直没怎么用过。趁着这段时间相对空闲,也就自己实现一遍。尽管互联网上已有大把类似的文章,但是自身实现的仍然值得记录。

环境:

主服务器:centos 6.0 mysql 5.1.67-log IP:192.168.0.107
从服务器:centos 6.0 mysql 5.1.67-log IP:192.168.0.109
主服务器test数据库

CREATE TABLE `menber` (
`name` varchar(255) DEFAULT NULL default '',
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
insert into `menber` (`name`, `id`) values('zhangsan','');
insert into `menber` (`name`, `id`) values('lisi','');
insert into `menber` (`name`, `id`) values('王五','');

mysql默认配置文件,如不特殊指定默认为/etc/my.cnf

mysql配置文件查找顺序:/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

配置:

一、主服务器

1.1、创建一个复制用户,具有replication slave 权限。

mysql>grant replication slave on *.* to 'repl'@'192.168.0.109' identified by 'repl';
mysql>flush privileges;

1.2、编辑my.cnf文件

vi /etc/my.cnf

添加

  server-id=107

并开启log-bin二进制日志文件(Mysql需要有/var/lib/mysql/目录的读写权限【可通过chown -R mysql:mysql /var/lib/mysql命令进行更改】)

  log-bin=/var/lib/mysql/mysql-bin

#指定绝对路径,否者会出现mysql运行show master status;时无法查看日志情况
mysql> show master status;
Empty set (0.00 sec)
mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging

其他扩展配置项: 

binlog-do-db=mysql1 #需要备份的数据库名,如果备份多个数据库,重复设置这个选项 即可
binlog-ignore-db=mysql2 #不需要备份的数据库名,如果备份多个数据库,重复设置这 个选项即可
log-slave-updates=1 #这个参数一定要加上,否则不会给更新的记录些到二进制文件 里
slave-skip-errors=1 #是跳过错误,继续执行复制操作(可选)

1.3、重启mysql数据库

service mysqld restart

1.4、设置读锁

mysql>flush tables with read lock;

1.5、得到binlog日志文件名和偏移量(此处记住File名称和Position值,后面slave服务器配置时需要用到)

mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 713 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

    

1.6、备份要同步的数据库

mysqldump test > test.sql

1.7、解锁

mysql>unlock tables;

    

二、从服务器(192.168.0.109)

将master(192.168.0.107)备份的数据库数据恢复到slave从服务器(192.168.0.109)

2.1、编辑my.cnf文件

vi /etc/my.cnf

添加

server-id=109

2.2、重启从数据库

service mysqld restart

2.3、对从数据库进行相应设置

  此处要注意logfile的名称和position的值,其余host、user和password为主数据库设置的账号和密码

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> change master to
   -> master_host='192.168.0.107',
   -> master_user='repl',
   -> master_password='repl',
   -> master_log_file='mysql-bin.000001',
   -> master_log_pos=713;

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.107
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1079
Relay_Log_File: mysqld-relay-bin.000004
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1079
Relay_Log_Space: 407
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)

ERROR:
No query specified

在这里主要是看:

  Slave_IO_Running=Yes
  Slave_SQL_Running=Yes

如果出现Slave_IO_Running: No或Slave_SQL_Running: NO,需要重做2.3、对从数据库进行相应设置

三、测试:
  上述项配置完以后可查看master和slave上线程的状态。在master上,你可以看到slave的I/O线程创建的连接:在master上输入show processlist\G;

mysql> show processlist\G;
*************************** 1. row ***************************
Id: 4
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 19
User: repl
Host: 192.168.0.109:42337
db: NULL
Command: Binlog Dump
Time: 183
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
2 rows in set (0.00 sec) ERROR:
No query specified

  3.1、在主数据库:192.168.0.107上添加新数据

insert into `menber` (`name`) values('李八');insert into `menber` (`name`) values('苍井空');

3.2从数据库:192.168.0.109上查看数据库

mysql> select * from menber;
+-----------+----+
| name | id |
+-----------+----+
| zhangsan | 1 |
| lisi | 2 |
| 王五 | 3 |
| 李八 | 4 |
| 苍井空 | 5 |
+-----------+----+
5 rows in set (0.02 sec)

  此时数据已经成功复制到slave从数据库192.168.0.109上。

mysql主从复制实现数据库同步的更多相关文章

  1. mysql主从复制(半同步方式)

    mysql主从复制(半同步方式) 博客分类: MySQL mysqlreplication复制  一.半同步复制原理介绍 1. 优点 当事务返回客户端成功后,则日志一定在至少两台主机上存在. MySQ ...

  2. Mysql主从复制原理及同步延迟问题

    本文转载自:Mysql主从复制原理及同步延迟问题 主从复制解决的问题 数据分布:通过复制将数据分布到不同地理位置 负载均衡:读写分离以及将读负载到多台从库 备份:可作为实时备份 高可用性:利用主主复制 ...

  3. MySQL主从复制之半同步模式

    MySQL主从复制之半同步模式 MySQL半同步介绍: 一般情况下MySQL默认复制模式为异步,何为异步?简单的说就是主服务器上的I/O threads 将binlog写入二进制日志中就返回给客户端一 ...

  4. MySQL主从复制解决数据库单点问题

    一.单个数据库服务器的缺点 数据库服务器存在单点问题: 数据库服务器资源无法满足增长的读写请求: 高峰时数据库连接数经常超过上限. 二.如何解决单点问题 增加额外的数据库服务器,组建数据库集群: 同一 ...

  5. mysql主从复制(主从同步)

    mysql主从同步 1.mysql主从同步(复制)概念 1. 将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一遍来实现的. 2. 复制过程中一个服务器充当主服务器,而一个或多个 ...

  6. Mysql主从复制、半同步复制、并行复制

    MySQL之间数据复制的基础是二进制日志文件(binary log file).一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以"事件"的方 ...

  7. mysql服务器主从数据库同步配置(转)

    <a href=""></a> <p>首先需要在同一个局域网内的两台机器(当然也可以用一台机器虚拟两台机器出来),都安装上mysql服务.< ...

  8. mysql服务器主从数据库同步配置

    首先需要在同一个局域网内的两台机器(当然也可以用一台机器虚拟两台机器出来),都安装上mysql服务. 主机A: 192.168.1.100 从机B: 192.168.1.101 可以有多台从机. 1. ...

  9. MySQL主从复制-指定数据库复制

    在/etc/my.cnf添加需要进行同步的数据库信息 #需要进行同步的数据库 #replicate-do-db=custmgr #replicate-do-db=sdata #replicate-ig ...

随机推荐

  1. asp.net获取服务器绝对路径和相对路径

    绝对路径 AppDomain.CurrentDomain.SetupInformation.ApplicationBase 相对路径 Server.MapPath("~/")表示当 ...

  2. HAProxy的日志配置以及ACL规则实现负载均衡

    HAProxy配置日志策略 默认情况下,HAProxy是没有配置日志的在centos6.3下默认管理日志的是rsyslog,可以实现UDP日志的接收,将日志写入文件,写入数据库先检测rsyslog是否 ...

  3. Wpf usercontrol dispose

    窗口关闭时组件"析构": public UserControl()        {            InitializeComponent();               ...

  4. C#窗体程序【用户控件-窗体】委托事件

    这里的自定义控件是由普通控件组合而成的.希望事件响应代码推迟到使用自定义控件的窗体里写.步骤一:新建一个用户控件,放两个按钮,Tag分别是btn1,btn2.这两个按钮的共用单击事件处理代码如下: u ...

  5. iOS 组件化漫谈

    1.准备工作 由于工程越来越大,里面的文件也越来越多.很多时候merge代码的时候工程文件起了冲突之后,若 .xcodeproj文件冲突 打开之后很难以修改. 架构其实相对开发来说还是比较难于下手的东 ...

  6. DOM编程的性能问题

    用脚本进行DOM操作的代价很昂贵,它是富Web应用中最常见的性能瓶颈. 浏览器中的DOM:天生就慢 DOM(文档对象模型)是独立于语言的,但在浏览器中的接口是用JavaScript实现的.两个相互独立 ...

  7. UML大战需求分析--阅读笔记01

    本次阅读的书籍是<UML大战需求分析>,看了前两章的内容:1 大话UML,2绞尽脑汁的需求分析.这两章内容关联不大,分开描述. 第一章:大话UML 本章主要概述UML是什么,有什么内容.U ...

  8. Linux系统资源查看

    以下Linux系统资源查看命令中,较常用的为vmstat 与 lsof vmstat [刷新延时 刷新次数] ucm@ucm-Aspire-TC-:~$ vmstat procs ---------- ...

  9. linux常见命令总结

    日志文件说明 /var/log/message 系统启动后的信息和错误日志,是Red Hat最常用的日志之一 /var/log/secure 与系统安全相关的日志信息 /var/log/maillog ...

  10. Bubble Cup 8 finals H. Bots (575H)

    题意: 简单来说就是生成一棵树,要求根到每个叶子节点上的路径颜色排列不同, 且每条根到叶子的路径恰有n条蓝边和n条红边. 求生成的树的节点个数. 1<=n<=10^6 题解: 简单计数. ...