ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql主从同步

2021-04-13 11:57:00  阅读:151  来源: 互联网

标签:同步 slave bawei master mysql 服务器 日志 主从


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

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

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

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

原理图如下:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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

标签:同步,slave,bawei,master,mysql,服务器,日志,主从
来源: https://blog.51cto.com/xinsz08/2702831

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有