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
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;
7、测试:
在主服务器中,新建一个数据库,查看从服务器是否更新
领取专属 10元无门槛券
私享最新 技术干货