14-3 17 MySQL主从配置
博客专区 > 阿想 的博客 > 博客详情
14-3 17 MySQL主从配置
阿想 发表于4个月前
14-3 17 MySQL主从配置
  • 发表于 4个月前
  • 阅读 5
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

MySQL主从配置

17.1 MySQL主从介绍

概念

  • MySQL主从又叫做Replication、AB复制。
  • 假设A机器作为主Master,B机器作为从Slave。MySQL主从实现A,B数据实时同步
  • 基于binlog,主上需要开启

主从原理

  • A通过log dump线程与B的I/O线程通信,使binlog与relaylog同步,relaylog再通过SQL线程将数据写入B。从而实现AB复制

  • A上写入数据——>数据变动记入binlog——>交给A上logdump线程——>交给B上I/O线程——>数据变动记入relaylog——>通过B上SQL线程——>数据写入B

场景:

  1. B作为备份
  2. B作为可读,减轻A访问压力

17.2 准备工作

  1. 安装MySQL wget tar mv 安装(./scripts/mysql_install_db --user= --datadir=)
  2. 配置my.cnf 配置服务脚本cp(support-file/mysql.server /etc/init.d/mysqld)
  3. 启动服务

MySQL启动异常,查看日志

cd /data/mysql
less 主机名.err

...[ERROR]...Permission denied ... 
...[ERROR]...read-write mode
  • 常见错误:权限问题,可能由于innobackup恢复后变为root

17.3 配置主

A机器作为主,IP为10.1.1.8

  • 主上配置主要有四步
    1. 开启主,加ID
    2. 准备库和同步用户
    3. 锁表,看主信息
    4. 做给B起始数据

第一步,开启主(binlog)

[root@axiang-02 ~]# vi /etc/my.cnf,
[mysqld]下增加
server-id=8
log_bin=axianglinux1
[root@axiang-02 ~]# /etc/init.d/mysqld restart  //重启
[root@axiang-02 ~]# cd /data/mysql
[root@axiang-02 mysql]# ls -lt
总用量 176184
-rw-rw---- 1 mysql mysql       22 8月  30 15:01 axianglinux1.index  binlog索引,主从根本
-rw-rw---- 1 mysql mysql      120 8月  30 15:01 axianglinux1.000001 第一个二进制binlog文件

第二步:准备库和同步用户

参照blog库制作axiang用于测试

[root@axiang-02 mysql]# mysqldump -uroot -paxianglinux blog > /tmp/blog.sql
[root@axiang-02 mysql]# mysql -uroot -paxianglinux -e "create database axiang"
[root@axiang-02 mysql]# mysql -uroot -paxianglinux axiang < /tmp/blog.sql
[root@axiang-02 mysql]# ls -lt
总用量 176184
-rw-rw---- 1 mysql mysql      220 8月  30 15:08 axianglinux1.000001
drwx------ 2 mysql mysql       20 8月  30 15:08 axiang

创建用作同步数据的用户

[root@axiang-02 mysql]# mysql -uroot -paxianglinux
mysql> grant replication slave on *.* to 'repl'@'10.1.1.9' identified by 'axianglinux';

第三步,锁表并查看主信息

mysql> flush tables with read lock;  锁表
mysql> show master status;
+---------------------+----------+--------------+------------------+-------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------------+----------+--------------+------------------+-------------------+
| axianglinux1.000001 |      425 |              |                  |                   |
+---------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

第四步,做给B起始数据

[root@axiang-02 mysql]# mysqldump -uroot -paxianglinux cms > /tmp/cms.sql
  • 同步axiang blog cms三个库,起始的数据要一致。
  • 可以通过mysqldump生成cms.sql blog.sql。复制给B机器

17.4 配置从

B机器作为从,IP为10.1.1.9

  • 从上配置主要有三步
    1. 加入ID
    2. 复制并同步A的起始数据
    3. 开启从

第一步,加入ID

[root@axiang-03 ~]# vi /etc/my.cnf
[mysqld]下加入
server-id=9  //不需要binlog,id不能与主一样,建议写IP末位

第二步,同步起始数据数据

[root@axiang-03 ~]# scp 10.1.1.8:/tmp/*.sql /tmp/  //远程复制过来
[root@axiang-03 ~]# mysql -uroot -paxianglinux

mysql> create database cms;
mysql> create database axiang;
mysql> create database blog;

[root@axiang-03 ~]# mysql -uroot -paxianglinux blog < /tmp/blog.sql 
[root@axiang-03 ~]# mysql -uroot -paxianglinux axiang < /tmp/blog.sql 
[root@axiang-03 ~]# mysql -uroot -paxianglinux cms < /tmp/cms.sql

第三步开启从

[root@axiang-03 ~]# mysql -uroot -paxianglinux
mysql> stop slave;
mysql> change master to master_host='10.1.1.8', master_user='repl', master_passwoord='axianglinux', master_log_file='axianglinux1.000001', master_log_pos=425;
mysql> start slave;
mysql> show slave status\G
 

  • 还要到主上执行 unlock tables

17.5 测试主从同步

指定主从范围

 主服务器上
 binlog-do-db=      //仅同步指定的库
 binlog-ignore-db= //忽略指定库

主加入指定同步数据库

 从服务器上
 replicate_do_db=
 replicate_ignore_db=
 replicate_do_table=
 replicate_ignore_table=
 replicate_wild_do_table=   //如aming.%, 支持通配符% 
 replicate_wild_ignore_table=
  • 一般使用最后两个replicate,因为前四个replicate匹配模糊,当选择了非监听库后,会忽略之后的操作。可能会导致数据丢失

测试结论

  • 开启主从后,如果起始数据不一致,对库,表,字段的操作。只要逻辑可行,则会保持主从同步的。比如主删除一个从上没有的用户,会导致主从断开。但是主添加新用户,删除两边都有的用户则可以同步
  • 从上只能进行查询操作。修改,添加会导致主从断开,需要按照新主状态show master status从新链接
共有 人打赏支持
粉丝 0
博文 72
码字总数 69742
×
阿想
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: