Linux下Mysql主从复制

一、前言:为什么MySQL要做主从复制(读写分离)?
通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。
为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载。
而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。

二、MySQL主从复制(读写分离)和集群的区别:
我对MySQL也是刚开始研究,不是很专业。我的理解是:
1、主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主的数据并用于数据查询操作)。
局限性:
(1)配置好主从复制之后,同一张表,只能对一个服务器写操作。如果在从上执行了写操作,而之后主也操作了这张表,或导致主从不同步;据说可以配置成主主方式,但我还没有研究到。
(2)主数据库服务器宕机,需要手动将业务系统切换到从数据库服务器。无法做到高可用性(除非再通过部署keepalive做成高可用方案)。
2、集群是由N台数据库服务器组成,数据的写入和查询是随机到任意一台数据库服务器的,其他数据库服务器会自动同步数据库的操作。
任何一台数据库宕机,不会对整个集群造成大的影响。
局限性:我经过测试才知道目前mysql集群版本(MySQL Cluster)只能对NDB存储引擎的数据进行集群同步,如果是INNODB或其他的MySQL存储引擎是不行的。这个也导致了我放弃了在业务系统中应用这种方案。

三、回归正题,接下来开始MySQL5.6.12的主从复制教程:
1、MySQL5.6开始主从复制有两种方式:基于日志(binlog);基于GTID(全局事务标示符)。
需要注意的是:GTID方式不支持临时表!所以如果你的业务系统要用到临时表的话就不要考虑这种方式了,至少目前最新版本MySQL5.6.12的GTID复制还是不支持临时表的。
所以此篇教程主要是告诉大家如何通过日志(binlog)方式做主从复制!

2、MySQL官方提供的MySQL Replication教程:
http://dev.mysql.com/doc/refman/5.6/en/replication.html
这个官方教程强烈建议大家阅读(需要一定的英语阅读能力哦!不行就google翻译后再阅读吧~)。

三:准备工作

配置MySQL主从复制(读写分离)之前,需要在主从两台服务器先安装好MySQL5.5。我的环境是2台做的实验

系统:CentOS6.4 32位

Mysql:5.5版本

selinux关闭 防火墙关闭

setenfore 0
setvice iptables stop

Master:42.51.153.157

Slave:42.51.155.219

2.就是要确定服务器上的Mysql

yum install mysql mysql-server -y

3.确认时间同步

[[email protected] ~]# yum install ntp -y
[[email protected] ~]# vi /etc/ntp.conf    #添加以下2行
server 127.127.1.0
fudge 127.127.1.0 stratum 8
[[email protected] ~]# /etc/init.d/ntpd restart   #重启ntpd服务

2)在节点服务器上进行时间同步

[[email protected] ~]# /etc/init.d/iptables stop
[[email protected] ~]# chkconfig iptables off
[[email protected] ~]# yum install -y ntpdate
[[email protected] ~]# /usr/sbin/ntpdate 42.51.153.157

四:配置Mysql

1.首先修改Mysql主配置的配置文件(Master)

[[email protected] ~]# \cp /etc/my.cnf /etc/my.cnf.old        ##修改之前备份
[[email protected] ~]# vi /etc/my.cnf                        ##修改
server-id       = 11                                     //修改

log-bin=master-bin                                         //修改

         log-slave-updates=true                                  //增加

[[email protected] ~]# /etc/init.d/mysqld restart           ##重启Mysql
[[email protected] ~]# mysql -u root –ppassword                  //登录数据库,给从服务器授权
mysql> grant replication slave on *.* to ‘yanghongfei‘@‘42.51.155.219‘ identified by ‘123456‘;
mysql> flush privileges;
mysql> show master status;                 ##这个日志后面会用的到
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      343 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

2.配置从服务器  (Slave)

[[email protected] shell]# vi /etc/my.cnf
server-id       = 33                                                        //修改     此处ID只要比Master大就可以

relay-log=relay-log-bin                                                     //增加

relay-log-index=slave-relay-bin.index                          //增加

修改完成之后重启mysql服务

登录Mysql,配置同步

[[email protected] shell]# service mysqld restart

[[email protected] ~]# mysql -u root –ppassword

mysql> stop slave;                                          ##首先停止

mysql>  change master to master_host=‘42.51.153.157‘,master_user=‘yanghongfei‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000005‘,master_log_pos=343;

mysql> start slave;

mysql> show slave status \G;

查看是否成功~

上面2处都为Yes的时候表示已经成功了~~

3. 测试主从是否复制成功,主服务器创建数据库看是不是被同步过去了

Master:

Slave:

下面我来装一个Discuz论坛 我们来测试下数据表会不会被同步进去,这里安装网站不再详细说了 我这面用的环境是lnmp   首先下载一个Discuz的包 网上有很多

[[email protected] ~]# unzip Discuz_7.2_FULL_SC_UTF8.zip      

[[email protected] ~]# mv upload/ /usr/share/nginx/html/

[[email protected] ~]# cd /usr/share/nginx/html/

[[email protected] html]# mv upload/ Discuz

[[email protected] html]# chmod 777 -R ./Discuz/

[[email protected] ~]# service nginx restart

Master:

Slave:

上面可以看出主从复制成功~~

时间: 2024-10-10 17:26:32

Linux下Mysql主从复制的相关文章

linux下mysql主从复制(第二篇读写分离) mycat 中间件

linux下mysql主从复制(第二篇读写分离) mycat 中间件 接着上篇文档补全,mysql 读写分离,在上篇文章案例下准备好Mycat-server-1.4-release-20151019230038-win.tar.gz 解压包 1.解压后的文件如下: 1.1 接下来进入到conf 目录下配置四个文件server.xml.schema.xml.rule.xml.log4j.xml 下面一一介绍 1.2 首先在我们主服务上面test 库下新建两张表如下: CREATETABLE`t_u

mysql学习(3)-linux下mysql主从复制

前言:为什么MySQL要做主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载.而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失. MySQL主从复制(读写分离)和集群的区别: 1.主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主的数据并用于数据查询操作).局限性:(1)配置好主从复制之后,同一张表

Linux下MySQL主从复制(二)

MySQL的一主多从模式 原理结构图 配置步骤 1.主服务器:  1. 改变server id   2. 启用二进制日志文件   3. 创建具有复制的用户123123 具体操作请看:http://www.crazyrui.pw:8088/index.php/2017/07/23/linux_mysql_savle_1/ 2.第一个从服务器配置  1. 改变server id   2. 启用relay_log   3. 连接主服务器      mysql>change master to MAST

linux下mysql基于mycat做主从复制和读写分离之基础篇

Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , mycat1.6-RELEASE jdk1.7及其以上版本2.实现步骤一(mycat实现读写分离) 1.首先在两台服务器安装mysql 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rp

Linux下MySQL忘记密码

系统:CentOS6.6 64位 参考文档(截图请看原网址): Linux下MySQL忘记root密码怎么办_百度经验 http://jingyan.baidu.com/article/1709ad80a8caf14634c4f013.html 具体步骤如下: 修改MySQL的配置文件(默认为/etc/my.cnf),在[mysqld]下添加一行skip-grant-tables 保存配置文件后,重启MySQL服务 service mysqld restart 再次进入MySQL命令行 mysq

linux下mysql忘记root密码怎么办

Linux下MySQL忘记root密码怎么办? Linux下MySQL忘记root密码怎么办? 1. 修改MySQL配置文件 默认MySQL的配置文件为/etc/my.cnf,在[mysqld]下面添加一行 1.skip-grant-tables 2. 保存配置文件,重启MySQL服务 1.service mysqld restart 3. 再次进入MySQL 1.[[email protected] mysql]$ mysql -u root -p2.Enter password: #此处直接

linux下mysql 安装

小菜鸟接触linux太晚, 装个mysql(免安装 mysql-5.6.22-linux-glibc2.5-x86_64版本,最简单的安装方法) 竞折腾了两个晚上… 网上到处有linux下mysql的安装,但我自己安装过程中总出现这样那样的问题,现将此次安装过程及错误记录,以供自己日后参考,也希望可以给后来人一些帮助… 1. 去Oracle下载mysql-5.6.22-linux-glibc*.tar.gz 2.解压 tar -zxvf mysql-5.6.22-linux-glibc*.tar

linux下mysql数据库主从同步配置

说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备篇: 说明:在两台MySQL服务器192.168.21.128和192.168.21.129上分别进行如下操作 备注: 作为主从服务器的MySQL版本建议使用同一版本! 或者必须保证主服务器的MySQL版本要高于从服务器的MySQL版本! 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接

一看便知linux下mysql报错ERROR 1044: Access denied for user: '@localhost' to database 'mysql'

错误信息:ERROR 1044: Access denied for user: '@localhost' to database 'mysql' linux下解决方案: mysql> use mysql ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'mysql' mysql> exit Bye [[email protected] ~]# service mysqld stop如果该命令不