前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql主从同步

mysql主从同步

作者头像
互联网老辛
发布2018-10-18 18:01:44
3.8K0
发布2018-10-18 18:01:44
举报
文章被收录于专栏:互联网老辛互联网老辛

非常感谢大家昨晚来到我们的公开课课堂,一起探讨了关于数据库的架构,最后详细探讨学习了mysql主从同步的搭建过程。

今天分享一下昨晚的mysql数据库主从搭建的课堂笔记,让更多的人因为这次课程受益,另外我们每隔一段时间都会有相应的互动课程,大家可以前往https://ke.qq.com/course/254420#tuin=b66303d9 腾讯课堂链接报名参加。

以下是本次课程的课堂笔记,主题聊聊数据库架构那些事

首先分享了同方,从14年到17年的数据库架构,接下来是关于数据库主从的搭建

原理图如下:

mysql主从复制中:

第一步: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从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。 此外,在master中也有一个工作线程和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

详细过程:

模式: C/S 模式

端口:

3306

x-63 主mysql服务器配置

创建要同步的数据库:

mysql> create database bawei;

mysql> use bawei;

mysql> create table test1 (id int);

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| bawei |

| mysql |

| test |

停止

#service mysqld stop

编辑

#vim /etc/my.cnf

[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 #在原配置文件中,添加以下内容:

log-bin=mysqllog #启用二进制日志,默认存在/var/lib/mysql 下面

server-id=1 #本机数据库ID 标示。其中master_id必须为1到232之间的一个正整数值

binlog-do-db=bawei #可以被从服务器复制的库。二进制需要同步的数据库名

# binlog-ignore-db=bawei2 不可以被从服务器复制的库

重新启动

#service mysqld restart

授权

mysql> grant replication slave on *.* to slave@192.168.1.64 identified by "123456";

查看状态,信息

mysql> show master status;

+-----------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-----------------+----------+--------------+------------------+

| mysqllog.000001 | 242 | bawei | |

+-----------------+----------+--------------+------------------+

1 row in set (0.00 sec)

查看二进制日志位置:

[root@x-63 ~]# ls /var/lib/mysql/

ibdata1 ib_logfile1 mysql mysqllog.index passwd

ib_logfile0 bawei mysqllog.000001 mysql.sock test

mysql>show binlog events \G

复制前保证两个数据库数据一致:

mysqldump -u root -p123456 -A >all.sql

Enter password:

-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

把数据传给从:

scp all.sql 192.168.1.64:/root

配置从服务器:

mysql从服务器: x-64

[root@x-64 opt]# yum install mysql-server -y

[root@x-64 opt]# service mysqld start

mysql>show variables like '%version%';查看版本

+-------------------------+---------------------+

| Variable_name | Value |

+-------------------------+---------------------+

| protocol_version | 10 |

| version | 5.1.52 |

| version_comment | Source distribution |

| version_compile_machine | x86_64 |

| version_compile_os | redhat-linux-gnu |

+-------------------------+---------------------+

5 rows in set (0.03 sec)

测试连接到主服务器是否成功

[root@x-64 opt]# mysql -u slave -h 192.168.1.63 -p123456

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| test |

+--------------------+

看不到bawei数据库

导入数据库,和主服务器保持一致

[root@x-64 ~]# mysql -u root -p < all.sql

从服务器没必要开bin-log日志注。

修改从服务器配置文件:

[root@x-64 ~]# vim /etc/my.cnf

[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 #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。

master-host=192.168.1.63 #指定主服务器IP地址

master-user=slave #制定在主服务器上可以进行同步的用户名

master-password=123456 #密码

####以下可以不写

master-port = 3306 #同步所用的端口

master-connect-retry=60 #断点重新连接时间

保存,重启

#service mysqld restart

如果只做为备库,就只设置server-ID, 如果他也作为一个分发主库,开启bin-log和中继日志

测试:

主服务器上查看:

mysql> show master status;

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id: 2

Current database: bawei1

+-----------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-----------------+----------+--------------+------------------+

| mysqllog.000004 | 106 | bawei1 | |

+-----------------+----------+--------------+------------------+

从服务器上查看:

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.63

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysqllog.000001

Read_Master_Log_Pos: 315

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 459

Relay_Master_Log_File: mysqllog.000001

Slave_IO_Running: Yes #可以看到这两个Yes,说明从服务器安装成功。

Slave_SQL_Running: Yes

Slave_IO_Running :一个负责与主机的io通信

Slave_SQL_Running:负责自己的slave mysql进程

mysql> START SLAVE

测试:数据同步

x-63写数据:

mysql> use bawei;

Database changed

mysql> show tables;

+--------------+

| Tables_in_bawei |

+--------------+

| test1 |

+--------------+

1 row in set (0.00 sec)

mysql> insert into test1 values(1);

x-64读数据:

mysql> use bawei;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from test1;

+------+

| id |

+------+

| 1 |

+------+

到现在为止mysql主从同步就搭建完成了,因为篇幅限制,后面会出现的问题解决方案暂时就不在这里阐述了,如果有兴趣的可以到公开课上一起探讨。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据架构师专家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档