MySQL 5.5 主从复制异步、半同步以及注意事项详解
时间:2022-03-14 03:21
大纲
一、前言
二、Mysql 基础知识
三、Mysql 复制(Replication)
四、Mysql 复制(Replication)类型
五、Mysql 主从复制基本步骤
六、Mysql 主从复制(异步)
七、Mysql 主从复制(半同步)
八、Mysql 复制工具
九、Mysql 复制注意事项
十、Mysql 复制过滤
一、前言
从这一篇博客开始我们就来学习mysql的高级课程,在前面的几篇博客我们讲解了mysql基础知识、mysql日志类型、mysql配置文件、mysql备份策略,这一篇博客中我们来讲解mysql的复制。
二、mysql基础知识
1.mysql日志类型
-
二进制日志
-
事务日志
-
错误日志
-
一般查询日志
-
中继日志
-
慢查询日志
注,有博友对mysql日志不怎么了解,可以参考这篇博客
2.mysql二进制日志详解
说明:默认开启,精确的记录了用户对数据库中的数据进行操作的命令和操作的数据对象。
二进制日志文件的作用:
-
提供了增量备份的功能
-
提供了数据基于时间点的恢复,这个恢复的时间点可以由用户控制
-
为mysql的复制架构提供基础,将这主服务器的二进制日志复制到从服务器上并执行同样的操作,就可将数据进行同步
-
实现数据的高可用
-
分担负载
二进制日志默认存放位置:
-
数据目录下,以mysql-bin.XXXXXX命名的日志
二进制日志格式:
-
基于语句 statement
-
基于行 row
-
混合方式 mixed
二进制日志滚动方式:
-
重启服务
-
日志达到最大上限
-
执行flush logs
二进制日志事件:
-
position 基于位置,也就是offset(偏移量)
-
datetime 基于时间
-
timestamp
二进制日志的查看与删除方式:
1 2 3 4 5 |
mysql>show master status; 查看当前正在使用的二进制日志
mysql>show binlog events in ‘mysql-bin.000001‘ ; 查看二进制日志记录的事件[from position]
mysql>flush logs; 二进制日志滚动
mysql>show binary logs; 查看所有二进制日志
mysql>purge binary logs to ‘mysql-bin.000003‘ ; 删除二进制日志
|
文件系统中查看二进制日志的命令:
1 2 3 4 5 6 |
mysqlbinlog
相关选项,
--start-position #开始位置
--stop-position #结束位置
--start-datetime ‘yyyy-mm-dd hh:mm:ss‘ ; #开始时间
--stop-datetime ‘‘ ; #结束时间
|
配置mysql的主配置文件:
1 2 3 4 5 6 7 8 9 |
sql_log_bin = {ON|OFF} #用于控制二进制日志信息是否记录进日志文件。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限
binlog_cache_size = 32768 #默认值32768 Binlog Cache 用于在打开了二进制日志(binlog)记录功能的环境,是 MySQL 用来提高binlog的记录效率而设计的一个用于短时间内临时缓存binlog数据的内存区域。一般来说,如果我们的数据库中没有什么大事务,写入也不是特别频繁,2MB~4MB是一个合适的选择。但是如果我们的数据库大事务较多,写入量比较大,可与适当调高binlog_cache_size。同时,我们可以通过binlog_cache_use 以及 binlog_cache_disk_use来分析设置的binlog_cache_size是否足够,是否有大量的binlog_cache由于内存大小不够而使用临时文件(binlog_cache_disk_use)来缓存了
binlog_stmt_cache_size = 32768 #当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句
log_bin = mysql-bin #指定binlog的位置,默认在数据目录下
binlog- format = {ROW|STATEMENT|MIXED} #指定二进制日志的类型,默认为MIXED。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。
sync_binlog = 10 #设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步
max_binlog_cache_size = {4096 .. 18446744073709547520} #二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。
max_binlog_stmt_cache_size = {4096 .. 18446744073709547520} #二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存
expire_log_days = {0..99} #设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时
|
注:一般建议将binlog日志与数据文件分开存放,不但可以提高mysql性能,还可以增加安全性!
三、Mysql 复制(Replication)
1.Mysql 复制作用
-
负载平衡(load balancing)
-
备份
-
高可用性(high availability)和容错
2.Mysql 复制如何工作
主要有三步(如下图):
-
master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
-
slave将master的binary log events拷贝到它的中继日志(relay log);
-
slave重做中继日志中的事件,将改变反映它自己的数据。
具体说明:
该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
SQL slave thread处理该过程的最后一步。SQL线程从中继日志读取事件,更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。所以slave上数据一般要慢于master上数据。即master与slave之间的数据在一定时间内会不同步。
四、Mysql 复制(Replication)类型
1.mysql复制类型有以下一些基本原则
-
每个slave只能有一个master;
-
每个slave只能有一个唯一的服务器ID;
-
每个master可以有很多slave;
-
如果你设置log_slave_updates,slave可以是其它slave的master,从而扩散master的更新。
注,MySQL不支持多主服务器复制(Multimaster Replication)——即一个slave可以有多个master。但是,通过一些简单的组合,我们却可以建立灵活而强大的复制体系结构。
2.mysql复制类型
(1).一主多从模式
注,由一个master和一个slave组成复制系统是最简单的情况。Slave之间并不相互通信,只能与master进行通信。
具体说明:
如果写操作较少,而读操作很时,可以采取这种结构。你可以将读操作分布到其它的slave,从而减小master的压力。但是,当slave增加到一定数量时,slave对master的负载以及网络带宽都会成为一个严重的问题。这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。一些建议:
-
不同的slave扮演不同的作用(例如使用不同的索引,或者不同的存储引擎)
-
用一个slave作为备用master,只进行复制
-
用一个远程的slave,用于灾难恢复
发送复制事件到其它slave,当设置log_slave_updates时,你可以让slave扮演其它slave的master。此时,slave把SQL线程执行的事件写进行自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它。
(2).双主模式
注,Master-Master复制的两台服务器,既是master,又是另一台服务器的slave。
具体说明:
主动的Master-Master复制有一些特殊的用处。例如,地理上分布的两个部分都需要自己的可写的数据副本。这种结构最大的问题就是更新冲突。假设一个表只有一行(一列)的数据,其值为1,如果两个服务器分别同时执行如下语句:
在第一个服务器上执行:
1 2 3 |
mysql> UPDATE tbl SET col=col + 1;
在第二个服务器上执行:
mysql> UPDATE tbl SET col=col * 2;
|
那么结果是多少呢?一台服务器是4,另一个服务器是3,但是,这并不会产生错误。
实际上,MySQL并不支持其它一些DBMS支持的多主服务器复制(Multimaster Replication),这是MySQL的复制功能很大的一个限制(多主服务器的难点在于解决更新冲突),但是,如果你实在有这种需求,你可以采用MySQL Cluster,以及将Cluster和Replication结合起来,可以建立强大的高性能的数据库平台。但是,可以通过其它一些方式来模拟这种多主服务器的复制。
(3).主从模式
注,这是master-master结构变化而来的,它避免了M-M的缺点,实际上,这是一种具有容错和高可用性的系统。它的不同点在于其中一个服务只能进行只读操作。
(4).带从服务器的Master-Master结构(Master-Master with Slaves)
注,这种结构的优点就是提供了冗余。在地理上分布的复制结构,它不存在单一节点故障问题,而且还可以将读密集型的请求放到slave上。
总结:一般常用的两种复制类型一种是主从模式,另一种是一主多从模式。在这一篇博客中我们主要讲解主从模式复制。
五、Mysql 主从复制基本步骤
1.master 配置
-
启用二进制日志
-
配置一个唯一的server-id
-
创建具有复制权限的用户
2.slave 配置
-
启用中继日志
-
配置一个唯一的server-id
-
连接主服务器,并开始复制数据
-
启动数据复制
注,基本步骤我们就说到这里,下面我们来具体演示一下主从复制。
六、Mysql 主从复制(异步)
1.mysql异步复制
异步复制:MySQL本身支持单向的、异步的复制。异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时,最重要的是这意味着当应用系统的事务在主服务器上提交并确认时数据并不能在同一时刻拷贝或应用到从服务器上。通常这个延时是由网络带宽、资源可用性和系统负载决定的。然而,使用正确的组件并且调优,复制能做到接近瞬时完成。
当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Bin log),并维护一个二进制日志文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程连接主库,要求主库把二进制日志的变化部分传给从库,并把传回的日志写入本地磁盘。另一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化。较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。下面我们来具体演示一下mysql的异步复制。
2.实验拓扑
注,Active (master,node1) 192.168.1.201 , Passive (slave,node2)192.168.1.202
3.环境配置
时间同步
1 2 |
[root@node1 ~] # ntpdate 202.120.2.101
[root@node2 ~] # ntpdate 202.120.2.101
|
4.操作系统
-
CentOS 6.4 X86_64
5.软件版本
-
Mysql 5.5.33 (注,这里用的是mysql 5.5.33二进制通用安装包,解压就能用)
6.安装并配置mysql
master:
(1).解压并链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@node1 src] # tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local/
[root@node1 src] # cd /usr/local/
[root@node1 local ] # ln -sv /usr/local/mysql-5.5.33-linux2.6-x86_64 mysql
"mysql" -> "/usr/local/mysql-5.5.33-linux2.6-x86_64"
[root@node1 local ] # cd mysql
[root@node1 mysql] # ll
总用量 200
drwxr-xr-x 2 root root 4096 8月 24 17:58 bin
-rw-r--r-- 1 7161 wheel 17987 7月 15 20:01 COPYING
drwxr-xr-x 3 root root 4096 8月 24 17:58 data
drwxr-xr-x 2 root root 4096 8月 24 17:58 docs
drwxr-xr-x 3 root root 4096 8月 24 17:58 include
-rw-r--r-- 1 7161 wheel 134493 7月 15 20:01 INSTALL-BINARY
drwxr-xr-x 3 root root 4096 8月 24 17:58 lib
drwxr-xr-x 4 root root 4096 8月 24 17:58 man
drwxr-xr-x 10 root root 4096 8月 24 17:58 mysql- test
-rw-r--r-- 1 7161 wheel 2496 7月 15 20:01 README
drwxr-xr-x 2 root root 4096 8月 24 17:58 scripts
drwxr-xr-x 27 root root 4096 8月 24 17:58 share
drwxr-xr-x 4 root root 4096 8月 24 17:58 sql-bench
drwxr-xr-x 3 root root 4096 8月 24 17:58 support-files
|
(2).新建mysql用户
1 2 3 4 |
[root@node1 mysql] # groupadd -g 3306 mysql
[root@node1 mysql] # useradd -u 3306 -g mysql -s /sbin/nologin -M mysql
[root@node1 mysql] # id mysql
uid=3306(mysql) gid=3306(mysql) 组=3306(mysql)
|
(3).修改mysql安装目录所有者与所属组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@node1 mysql] # chown -R root.mysql /usr/local/mysql/*
[root@node1 mysql] # ll
总用量 200
drwxr-xr-x 2 root mysql 4096 8月 24 17:58 bin
-rw-r--r-- 1 root mysql 17987 7月 15 20:01 COPYING
drwxr-xr-x 3 root mysql 4096 8月 24 17:58 data
drwxr-xr-x 2 root mysql 4096 8月 24 17:58 docs
drwxr-xr-x 3 root mysql 4096 8月 24 17:58 include
-rw-r--r-- 1 root mysql 134493 7月 15 20:01 INSTALL-BINARY
drwxr-xr-x 3 root mysql 4096 8月 24 17:58 lib
drwxr-xr-x 4 root mysql 4096 8月 24 17:58 man
drwxr-xr-x 10 root mysql 4096 8月 24 17:58 mysql- test
-rw-r--r-- 1 root mysql 2496 7月 15 20:01 README
drwxr-xr-x 2 root mysql 4096 8月 24 17:58 scripts
drwxr-xr-x 27 root mysql 4096 8月 24 17:58 share
drwxr-xr-x 4 root mysql 4096 8月 24 17:58 sql-bench
drwxr-xr-x 3 root mysql 4096 8月 24 17:58 support-files
|
(4).为mysql提供配置文件并修改
1 2 3 4 5 |
[root@node1 mysql] # cp support-files/my-large.cnf /etc/my.cnf
[root@node1 mysql] # vim /etc/my.cnf
[mysqld]
#增加一行
datadir = /mydata/data
|
(5).为mysql提供启动脚本
1 2 |
[root@node1 mysql] # cp support-files/mysql.server /etc/init.d/mysqld
[root@node1 mysql] # chmod +x /etc/init.d/mysqld
|
(6).初始化mysql数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
[root@node1 ~] # mkdir -pv /mydata/data
mkdir : 已创建目录 "/mydata"
mkdir : 已创建目录 "/mydata/data"
[root@node1 ~] # chown -R mysql.mysql /mydata/data/
[root@node1 ~] # /usr/local/mysql/scripts/mysql_install_db --datadir=/mydata/data/ --basedir=/usr/local/mysql --user=mysql
Installing MySQL system tables...
/usr/local/mysql/bin/mysqld : error while loading shared libraries: libaio.so.1: cannot open shared object file : No such file or directory
Installation of system tables failed! Examine the logs in
/mydata/data/ for more information.
You can try to start the mysqld daemon with:
shell> /usr/local/mysql/bin/mysqld --skip-grant &
and use the command line tool /usr/local/mysql/bin/mysql
to connect to the mysql database and look at the grant tables:
shell> /usr/local/mysql/bin/mysql -u root mysql
mysql> show tables
Try ‘mysqld --help‘ if you have problems with paths. Using --log
gives you a log in /mydata/data/ that may be helpful.
Please consult the MySQL manual section
‘Problems running mysql_install_db‘ , and the manual section that
describes problems on your OS. Another information source are the
MySQL email archives available at http: //lists .mysql.com/.
Please check all of the above before mailing us! And remember, if
you do mail us, you MUST use the /usr/local/mysql/scripts/mysqlbug script!
[root@node1 ~] # cd /mydata/data/
[root@node1 data] # ll
总用量 8
drwx------ 2 mysql root 4096 8月 24 18:21 mysql
drwx------ 2 mysql root 4096 8月 24 18:21 test
|
(7).启动并测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
启动报错
[root@node1 data] # service mysqld start
Starting MySQL. ERROR! The server quit without updating PID file ( /mydata/data/node1 . test .com.pid).
查看一下错误日志
[root@node1 data] # vim node1.test.com.err
130824 18:21:44 mysqld_safe Starting mysqld daemon with databases from /mydata/data
/usr/local/mysql/bin/mysqld : error while loading shared libraries: libaio.so.1: cannot open shared object file : No such file or directory
130824 18:21:44 mysqld_safe mysqld from pid file /mydata/data/node1 . test .com.pid ended
注,从错误日志中我们看到差一个库文件libaio,我们用yum安装一下即可。
[root@node1 data] # yum install -y libaio
重新初始化mysql
[root@node1 data] # /usr/local/mysql/scripts/mysql_install_db --datadir=/mydata/data/ --basedir=/usr/local/mysql --user=mysql
启动mysql
[root@node1 data] # service mysqld start
Starting MySQL... SUCCESS!
环境变量配置
[root@node1 data] # vim /etc/profile.d/mysql.sh
export PATH=$PATH: /usr/local/mysql/bin
[root@node1 data] # source /etc/profile
测试一下
[root@node1 data] # mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.33-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and /or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and /or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.03 sec)
mysql>
|
好了,到这里master的mysql配置完成,下面我们进行slave的mysql配置。
slave:
(1).解压并链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@node2 ~] # tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local/
[root@node2 ~] # cd /usr/local/
[root@node2 local ] # ln -sv /usr/local/mysql-5.5.33-linux2.6-x86_64 mysql
"mysql" -> "/usr/local/mysql-5.5.33-linux2.6-x86_64"
[root@node2 local ] # cd mysql
[root@node2 mysql] # ll
总用量 200
drwxr-xr-x 2 root root 4096 8月 24 18:41 bin
-rw-r--r-- 1 7161 wheel 17987 7月 15 20:01 COPYING
drwxr-xr-x 3 root root 4096 8月 24 18:41 data
drwxr-xr-x 2 root root 4096 8月 24 18:41 docs
drwxr-xr-x 3 root root 4096 8月 24 18:41 include
-rw-r--r-- 1 7161 wheel 134493 7月 15 20:01 INSTALL-BINARY
drwxr-xr-x 3 root root 4096 8月 24 18:41 lib
drwxr-xr-x 4 root root 4096 8月 24 18:41 man
drwxr-xr-x 10 root root 4096 8月 24 18:41 mysql- test
-rw-r--r-- 1 7161 wheel 2496 7月 15 20:01 README
drwxr-xr-x 2 root root 4096 8月 24 18:41 scripts
drwxr-xr-x 27 root root 4096 8月 24 18:41 share
drwxr-xr-x 4 root root 4096 8月 24 18:41 sql-bench
drwxr-xr-x 3 root root 4096 8月 24 18:41 support-files
|
(2).新建mysql用户
1 2 3 4 |
[root@node2 mysql] # groupadd -g 3306 mysql
[root@node2 mysql] # useradd -u 3306 -g mysql -s /sbin/nologin -M mysql
[root@node2 mysql] # id mysql
uid=3306(mysql) gid=3306(mysql) 组=3306(mysql)
|
(3).修改mysql安装目录所有者与所属组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@node2 mysql] # chown -R root.mysql /usr/local/mysql/*
[root@node2 mysql] # ll
总用量 200
drwxr-xr-x 2 root mysql 4096 8月 24 18:41 bin
-rw-r--r-- 1 root mysql 17987 7月 15 20:01 COPYING
drwxr-xr-x 3 root mysql 4096 8月 24 18:41 data
drwxr-xr-x 2 root mysql 4096 8月 24 18:41 docs
drwxr-xr-x 3 root mysql 4096 8月 24 18:41 include
-rw-r--r-- 1 root mysql 134493 7月 15 20:01 INSTALL-BINARY
drwxr-xr-x 3 root mysql 4096 8月 24 18:41 lib
drwxr-xr-x 4 root mysql 4096 8月 24 18:41 man
drwxr-xr-x 10 root mysql 4096 8月 24 18:41 mysql- test
-rw-r--r-- 1 root mysql 2496 7月 15 20:01 README
drwxr-xr-x 2 root mysql 4096 8月 24 18:41 scripts
drwxr-xr-x 27 root mysql 4096 8月 24 18:41 share
drwxr-xr-x 4 root mysql 4096 8月 24 18:41 sql-bench
drwxr-xr-x 3 root mysql 4096 8月 24 18:41 support-files
|
(4).为mysql提供配置文件并修改
1 2 3 4 |
[root@node2 mysql] # cp support-files/my-large.cnf /etc/my.cnf
[root@node2 mysql] # vim /etc/my.cnf
[mysqld]
datadir = /mydata/data
|
(5).为mysql提供启动脚本
1 2 |
[root@node2 mysql] # cp support-files/mysql.server /etc/init.d/mysqld
[root@node2 mysql] # chmod +x /etc/init.d/mysqld
|
(6).初始化mysql数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
先安装libaio库文件
[root@node2 mysql] # yum install -y libaio
[root@node2 mysql] # mkdir -pv /mydata/data
mkdir : 已创建目录 "/mydata"
mkdir : 已创建目录 "/mydata/data"
[root@node2 mysql] # cd /mydata/data
[root@node2 data] # chown -R mysql.mysql /mydata/data/
[root@node2 data] # /usr/local/mysql/scripts/mysql_install_db --datadir=/mydata/data/ --basedir=/usr/local/mysql --user=mysql
[root@node2 data] # ll
总用量 1084
drwx------ 2 mysql root 4096 8月 24 18:49 mysql
-rw-rw---- 1 mysql mysql 27698 8月 24 18:49 mysql-bin.000001
-rw-rw---- 1 mysql mysql 1061358 8月 24 18:49 mysql-bin.000002
-rw-rw---- 1 mysql mysql 38 8月 24 18:49 mysql-bin.index
drwx------ 2 mysql mysql 4096 8月 24 18:49 performance_schema
drwx------ 2 mysql root 4096 8月 24 18:49 test
|
(7).启动并测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
启动mysql
[root@node2 data] # service mysqld start
Starting MySQL... SUCCESS!
环境变量配置
[root@node2 data] # vim /etc/profile.d/mysql.sh
export PATH=$PATH: /usr/local/mysql/bin
[root@node1 data] # source /etc/profile
测试一下
[root@node2 data] # mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.33-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and /or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and /or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.06 sec)
mysql>
|
好了,slave的mysql也配置完成了,下面我们来配置主从复制。
7.配置master
(1).修改配置文件
1 2 3 4 5 6 7 |
[root@node1 ~] # vim /etc/my.cnf
#增加下面几行
[mysqld]
log-bin=master-bin
log-bin-index=master-bin.index
server- id = 1
innodb_file_per_table = 1
|
(2).授权复制用户
1 2 3 4 |
mysql> grant replication slave on *.* to ‘repluser‘ @ ‘192.168.1.%‘ identified by ‘replpass‘ ;
Query OK, 0 rows affected (0.61 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.41 sec)
|
(3).重启一下mysql服务
1 2 3 |
[root@node1 ~] # service mysqld restart
Shutting down MySQL....... SUCCESS!
Starting MySQL............. SUCCESS!
|
8.配置slave
(1).修改配置文件
1 2 3 4 5 6 |
[root@node2 ~] # vim /etc/my.cnf
#增加下面几行
[mysqld]
relay-log = relay-log
relay-log-index = relay-log.index
server- id = 10
|
(2).重启mysql服务
1 2 3 |
[root@node2 ~] # service mysqld restart
Shutting down MySQL..... SUCCESS!
Starting MySQL........... SUCCESS!
|
(3).连接主服务器并复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
查看master上二进制日志
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 107 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
连接master服务器
mysql> change master to master_host= ‘192.168.1.201‘ ,master_user= ‘repluser‘ ,master_password= ‘replpass‘ ,master_log_file= ‘master-bin.000001‘ ,master_log_pos=107;
Query OK, 0 rows affected (0.07 sec)
查看一下slave状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.1.201
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 107
Relay_Log_File: relay-log.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: No
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: 107
Relay_Log_Space: 107
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 0
1 row in set (0.00 sec)
启动复制并查看状态
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.1.201
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 107
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 254
Relay_Master_Log_File: master-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: 107
Relay_Log_Space: 404
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
&n
|