设为首页 收藏本站
查看: 512|回复: 0

[经验分享] mysql主从复制

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-28 10:10:01 | 显示全部楼层 |阅读模式
CentOS6.4系统MySQL主从复制基本配置教程
rpm -qa |grep mysql

yum install -y mysql-server mysql mysql-deve

/etc/init.d/mysqld start

mysqladmin -u root password 'shiyanjun'

mysql -u root -p
关闭iptables setenforce

主节点配置

首先,考虑到数据库的安全,以及便于管理,我们需要在主节点m1上增加一个专用的复制用户,使得任意想要从主节点进行复制从节点都必须使用这个账号:

CREATE USER repli_user;
GRANT REPLICATION SLAVE ON *.* TO 'repli_user'@'%' IDENTIFIED BY 'shiyanjun';

这里还进行了操作授权,使用这个换用账号来执行集群复制。如果想要限制IP端段,也可以在这里进行配置授权。
然后,在主节点192.168.6.17上,修改MySQL配置文件/etc/my.cnf,使其支持Master复制功能,修改后的内容如下所示:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=1
log-bin=m-bin
log-bin-index=m-bin.index

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server-id指明主节点的身份,从节点通过这个server-id来识别该节点是Master节点(复制架构中的源数据库服务器节点)。
如果MySQL当前已经启动,修改完集群复制配置后需要重启服务器:
/etc/init.d/mysqld restart

从节点配置

接着,类似地进行从节点192.168.7.113的配置,同样修改MySQL配置文件/etc/my.cnf,使其支持Slave端复制功能,修改后的内容如下所示:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

同样,如果MySQL当前已经启动,修改完集群复制配置后需要重启服务器:
/etc/init.d/mysqld restart

然后,需要使从节点192.168.7.113指向主节点,并启动Slave复制,执行如下命令:
CHANGE MASTER TO MASTER_HOST='192.168.6.17', MASTER_PORT=3306, MASTER_USER='repli_user', MASTER_PASSWORD='shiyanjun';
START SLAVE;

验证集群复制

这时,可以在主节点192.168.6.17上执行相关操作,验证从节点nn同步复制了主节点的数据库中的内容变更。
如果此时,我们已经配置好了主从复制,那么对于主节点m1上MysQL数据库的任何变更都会复制到从节点nn上,包括建库建表、插入更新等操作,下面我们从建库开始:
在主节点192.168.6.17上建库建表:

CREATE DATABASE workflow;
CREATE TABLE `workflow`.`project` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `type` tinyint(4) NOT NULL DEFAULT '0',
  `description` varchar(500) DEFAULT NULL,
  `create_at` date DEFAULT NULL,
  `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在192.168.6.17上查看binlog内容,执行命令:
SHOW BINLOG EVENTS\G
binlog内容内容如下所示:
01
*************************** 1. row ***************************
02
   Log_name: m-bin.000001
03
        Pos: 4
04
Event_type: Format_desc
05
  Server_id: 1
06
End_log_pos: 106
07
       Info: Server ver: 5.1.73-log, Binlog ver: 4
08
*************************** 2. row ***************************
09
   Log_name: m-bin.000001
10
        Pos: 106
11
Event_type: Query
12
  Server_id: 1
13
End_log_pos: 197
14
       Info: CREATE DATABASE workflow
15
*************************** 3. row ***************************
16
   Log_name: m-bin.000001
17
        Pos: 197
18
Event_type: Query
19
  Server_id: 1
20
End_log_pos: 671
21
       Info: CREATE TABLE `workflow`.`project` (
22
  `id` int(11) NOT NULL AUTO_INCREMENT,
23
  `name` varchar(100) NOT NULL,
24
  `type` tinyint(4) NOT NULL DEFAULT '0',
25
  `description` varchar(500) DEFAULT NULL,
26
  `create_at` date DEFAULT NULL,
27
  `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
28
  `status` tinyint(4) NOT NULL DEFAULT '0',
29
  PRIMARY KEY (`id`)
30
) ENGINE=InnoDB DEFAULT CHARSET=utf8
31
3 rows in set (0.00 sec)
通过上述binlog内容,我们大概可以看到MySQL的binlog都记录那些信息,一个事件对应一行记录。这些记录信息的组织结构如下所示:

Log_name:日志名称,指定的记录操作的binlog日志名称,这里是m-bin.000001,与我们前面在/etc/my.cnf中配置的相对应
Pos:记录事件的起始位置
Event_type:事件类型
End_log_pos:记录事件的结束位置
Server_id:服务器标识
Info:事件描述信息
然后,我们可以查看在从节点nn上复制的情况。通过如下命令查看从节点nn上数据库和表的信息:

1
SHOW DATABASES;
2
USE workflow;
3
SHOW TABLES;
4
DESC project;
我们再看一下执行插入语句的情况。在主节点m1上执行如下SQL语句:

1
INSERT INTO `workflow`.`project` VALUES(1, 'Avatar-II', 1, 'Avatar-II project', '2014-02-16','2014-02-16 11:09:54', 0);
可以在从节点上执行查询,看到从节点nn上复制了主节点m1上执行的INSERT语句的记录:

1
SELECT * FROM workflow.project;
验证复制成功。

复制常用命令

下面,我们总结了几个在MySQL主从复制场景中常用到的几个相关命令:

1
STOP MASTER;
终止主节点复制
1
RESET MASTER;
清除主节点复制文件
1
STOP SLAVE;
终止从节点复制
1
RESET SLAVE;
清除从节点复制文件
1
SHOW MASTER STATUS\G;
结果示例:

*************************** 1. row ***************************
            File: m-bin.000001
        Position: 956
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
查看主节点复制状态
1
SHOW SLAVE STATUS\G;
结果示例:

01
*************************** 1. row ***************************
02
               Slave_IO_State: Waiting for master to send event
03
                  Master_Host: m1
04
                  Master_User: repli_user
05
                  Master_Port: 3306
06
                Connect_Retry: 60
07
              Master_Log_File: m-bin.000001
08
          Read_Master_Log_Pos: 956
09
               Relay_Log_File: slave-relay-bin.000002
10
                Relay_Log_Pos: 1097
11
        Relay_Master_Log_File: m-bin.000001
12
             Slave_IO_Running: Yes
13
            Slave_SQL_Running: Yes
14
              Replicate_Do_DB:
15
          Replicate_Ignore_DB:
16
           Replicate_Do_Table:
17
       Replicate_Ignore_Table:
18
      Replicate_Wild_Do_Table:
19
  Replicate_Wild_Ignore_Table:
20
                   Last_Errno: 0
21
                   Last_Error:
22
                 Skip_Counter: 0
23
          Exec_Master_Log_Pos: 956
24
              Relay_Log_Space: 1252
25
              Until_Condition: None
26
               Until_Log_File:
27
                Until_Log_Pos: 0
28
           Master_SSL_Allowed: No
29
           Master_SSL_CA_File:
30
           Master_SSL_CA_Path:
31
              Master_SSL_Cert:
32
            Master_SSL_Cipher:
33
               Master_SSL_Key:
34
        Seconds_Behind_Master: 0
35
Master_SSL_Verify_Server_Cert: No
36
                Last_IO_Errno: 0
37
                Last_IO_Error:
38
               Last_SQL_Errno: 0
39
               Last_SQL_Error:
40
1 row in set (0.00 sec)
查看从节点复制状态
1
SHOW BINARY LOGS\G
查看BINLOG列表


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-250559-1-1.html 上篇帖子: mac本地连接vagrant中的mysql 下篇帖子: MariaDB多源复制环境搭建(多主一丛) mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表