• 幕客老师召集小伙伴
  • python自动化运维项目实战
  • nginx从入门到实战

Mysql主从搭建

Mysql的主从架构模式,是很多企业广泛使用,并且大家所广为熟知的一种架构模式,从主从模式搭建配合MHA实现故障自动化的感知迁移,这都是DBA所应该熟练掌握的技能。这周Jeson老师将准备两篇文章,系统性的介绍给大家Mysql主从+MHA的架构实现和搭建。

 

 

好了,今天我们先来聊一聊Mysql的主从部分。

 

 

一、Mysql 主从理论部分:

 

 

mysql主从复制用途

·       实时灾备,用于故障切换

·       读写分离,提供查询服务

·       备份,避免影响业务

 

主从部署必要条件:

·       主库开启binlog日志(设置log-bin参数)

·       主从server-id不同

·       从库服务器能连通主库

存在的问题:

·       主库宕机后,数据可能丢失

·       从库只有一个sql Thread,主库写压力大,复制很可能延时

解决方法:

·       半同步复制、或者全同步复制  要求:Mysql5.7版本

·       并行复制----解决从库复制延迟的问题   要求:Mysql5.6版本以上,建议5.7版

 

主从同步原理:

 

 

从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致

  

 

 

二、Mysql 主从配置步骤:

 

1编辑数据库配置文件my.cnf,一般在/etc/目录下

#vi /etc/my.cnf

[mysqld]的下面加入下面代码:

 log-bin=mysql-bin

 server-id=1                                                               #注意:保证从服务器的该值不同,可以自定义

 innodb_flush_log_at_trx_commit=1

 sync_binlog=1

    binlog-do-db=wordpress       表示只备份该数据库,可以不写,则为全部                        

 binlog_ignore_db=mysql        表示忽略备份mysql ,可以不写,则为不忽略

 

2重启mysql服务器:

        /etc/init.d/mysqld restart

 

3登录MySQL主服务器。

1.     #mysql -uroot -p

   在主服务器新建一个用户赋予“REPLICATION SLAVE的权限。你不需要再赋予其它的权限。

       X.X.X.X替换为从服务器的IP

       把####替换成自定义的用户名

        password :为服务器mysql密码

1.     mysql> CREATE USER '####'@ 'X.X.X.X' IDENTIFIED BY 'password';

2.     mysql>  GRANT REPLICATION SLAVE ON *.* TO '####'@'X.X.X.X' IDENTIFIED BY 'password';

 

 4行以下命令锁定数据库以防止写入数据

mysql>FLUSH TABLES WITH READ LOCK;

 5退出mysql命令行,导出数据库

#mysqldump -u root -p123456 --all-databases  --lock-tables=false  -- > /root/all.sql

6使用scp命令传输数据库文件all.sql到从服务器

          #scp /root/all.sql root@xxxxx:/root              X.X.X.X替换为从服务器的IP

7再次连接数据库进入mysql命令行查看master状态

           mysql>show master status;

请记下显示的信息,配置从服务器会用到。

+——————+———-+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000003 | 1001741 | dbispconfig | mysql |

+——————+———-+————–+——————+

1 row in set (0.00 sec)

8解锁数据表

1.     mysql>UNLOCK TABLES;

 

配置从服务器:

1导入主服务器的数据库数据

  #mysql -u root -p123456 < /root/all.sql

2编辑配置文件my.cnf,在[mysqld]下面加入

server-id=2

#relay-log=relay-log-bin

#relay-log-index=slave-relay-bin.index

3保存文件并重启mysqld

#service mysqld restart                       // 或者  /etc/init.d/mysqld restart

4登录mysql服务器,执行以下命令

mysql> CHANGE MASTER TO

    MASTER_HOST='X.X.X.X',                  # 主服务器IP

    MASTER_USER='user',  #设置主服务器访问权限的用户名 #####一致

    MASTER_PASSWORD='password',    密码 ;同上面password 一致

    MASTER_PORT=3306,            #端口号 (如果未曾修改,默认即可)

    MASTER_LOG_FILE='mysql-bin.000001',   

            # 主要从哪个版本进行复制,建议从000001开始版本在主服务器

                            show master  status 下面的File                                                             

                         MASTER_LOG_POS=98,  

                           # 控制从MASTER_LOG_FILE中具体哪个位置来拷贝

                         MASTER_CONNECT_RETRY=10;   # 10秒复制一次

5启动slave进程。

mysql>START SLAVE;

 

6查看slave:

          mysql > show slave status\G; 


测试:

     在主服务器中,新建一个数据库,查看从服务器是否更新

 

Mysql主从搭建

Pingbacks已打开。

引用地址

暂无评论

发表评论