总结mysql主从

写得不是很好,希望大家多多吐槽 >__<

mysql主从总结

一、原理

(1)流程

A ---  change data ---> 记录bin_log  ---> transfer(传到) ---->  B ---> repl_log(记录自己的从日志repl_log) ----> change data(更改自己的数据)

(2)说明

主mysql进行操作(create,update,insert,delete。。。),记录二进制log文件(bin_log )

然后把日志推到从上去,从接收到主日志后,修改自己的 replay_log

二、实验、一台机器跑两个mysql服务

(i)准备工作

一、安装主mysql

主(master):3306  mysql 

从(slave)   :3307  mysql_slave

(1)删除原来已安装的mysql

rm -rf /usr/local/mysql

rm -rf /data/mysql

(2)安装主mysql

解压:  tar zxvf mysql-5.1.49-linux-i686-glibc23.tar.gz

移动:  mv  mysql-5.1.49-linux-i686-glibc23    /usr/local/mysql

(3)检查有没有mysql用户

grep ‘mysql‘ /etc/passwd (没有则创建: useradd -s /sbin/nologin mysql )

(4)拷贝配置文件,启动脚本

cd  /usr/local/mysql

cp   support-files/my-small.cnf    /etc/my.cnf

cp   support-files/mysql.server    /etc/init.d/mysqld

编辑 mysqld

basedir=/usr/local/mysql

datadir=/data/mysql

(5)初始化(之后会在 /data/mysql 下有 2 个目录mysql, test)

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

(6)启动主mysql

/etc/init.d/mysqld start

二、安装从mysql

(0)复制mysql解压目录到从上

cp  -r   /usr/local/mysql  /usr/local/mysql_slave

(1)复制主的配置文件

cp /etc/my.cnf  /usr/local/mysql_slave/

(2)修改从配置文件:vim my.cnf

port=3307

socket=/tmp/mysql_slave.sock

datadir=/data/mysql_slave

(3)初始化操作

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave

(4)修改从启动脚本

cp /etc/init.d/mysqld    /etc/init.d/mysqldslave

修改:

basedir=/usr/local/mysql_slave

datadir=/data/mysql_slave

conf=$basedir/my.cnf   (2个地方,#Try to find basedir in /etc/my.cnf 也需要改)

(5)保存启动从

/etc/init.d/mysqldslave start

科普:

登录mysql的2种方式

(1)host+端口

mysql -h127.0.0.1 -P3306  (主)

mysql -h127.0.0.1 -P3307  (从)

(2)socket

mysql -S /tmp/mysql.sock(主)

mysql -S  /tmp/mysql_slave.sock(从)

ps:直接mysql是登录主

(ii)主从配置

一、主mysql创建测试数据库并导入数据

(1)登录主,创建测试数据库db1

mysql ——》 create database db1;

(2)导出主mysql库的数据给db1

mysqldump -S /tmp/mysql.sock mysql > 123.sql

mysql -S         /tmp/mysql.sock db1 < 123.sql

二、配置主

(1)修改配置文件vim /etc/my.cnf

(a)server-id=1

(b)log-bin=windysai (名字随便)

(c)可选参数

binlog-ignore-db=mysql (不同步mysql库)

(binlog-do-db=db1,db2:只针对db1,db2做主从)

(2)重启主mysql

/etc/init.d/mysqld restart

(ls /data/mysql 会生成bin_log——2个文件:windysai.000001,windysai.index)

(3)进入主mysql,授权传输bin_log的repl

(a)登录主 mysql

(b)grant replication slave on *.* to ‘repl‘@‘127.0.0.1‘ identified by ‘123456‘;

(4)把表的读锁死

flush tables with read lock;

(5)show master status; (记下File 和 Position的值)

三、配置从

(1)vim /usr/local/mysql_slave/my.cnf (ps:不在/etc/init.d/目录下)

(a)server-id = 111 (和主要不同!)

(b)可选参数

replicate-do-db=db1,db2

replicate-ignore-db=mysql

(2)拷贝主上的库db1(保证主从的库是一样的)

(a)mysql -S /tmp/mysql_slave.sock -e "create database db1"

(b)mysql -S /tmp/mysql_slave.sock db1 <123.sql

(iii)实现同步并测试

一、从mysql设置

(1)登录从

mysql -S /tmp/mysql_slave.sock

(2)关闭从:slave stop

(3)change master to master_host=‘127.0.0.1‘, master_port=3306, master_user=‘repl‘, master_password=‘123123‘, master_log_file="jiayi.000001‘, master_log_pos=106;

(4)重启从mysql

/etc/init.d/mysqldslave restart

(5)重新登录从mysql

(6)开启从: slave start

(7)查看状态

show slave status\G;  (2个yes)

 

(iv)测试主从

一、主mysql登录: mysql

(1)主mysql 解锁表的读read lock

unlock tables;

(2)删除 db1 的某些表

use db1;    show tables;

drop tables help_category;

二、从登录: mysql -S /tmp/mysql_slave.sock -P3307

(1)查看db1库的tables,发现 没有 help_category

use db1;

show tables;

(2)从把db1库的proc表删除

drop table proc;  (主上看没有了proc)

(3)从创建表jiayilinux

show create table `jiayilinux` ....

(参考 show create table user\G;)

(4)删除整个数据库db1

drop database db1;

(v)总结

Mysql的主从机制比较脆弱,谨慎操作。

如果重启主的mysql,务必把从停掉(slave stop)

然后再重启主mysql服务,从再开启(slave start)

否则有可能会中断

时间: 2024-10-11 07:40:51

总结mysql主从的相关文章

mysql主从配置

首先说下为什么需要mysql主从? 主要有三个原因:1,可以辅助备份,提高数据安全性:2,可以实现读写分离,达到负载分担的效果:3,可以实现高可用,在主服务器故障时,迅速切换到从,保证业务不间断运行. 针对上述需求,基本上一主一从,即可满足. 再来看下mysql主从复制的工作过程: 主要有三步: 1)master将改变记录到二进制日志(binary log)中,(这些记录叫做二进制日志事件,binary log events)   2)slave将master的binary log events

MYSQL 主从同步故障-Error1062--解决方案

MYSQL 主从同步故障-Error1062-解决方案 公司有两台Mysql服务器之前配置了主从同步,今天用户反映数据有差异,登陆到服务器上查看Mysql主从配置,发现有错误: show slave status \G;  果然出现问题了 Slave_IO_Running: Yes Slave_SQL_Running: No 而且出现了1062错误 Last_SQL_Error: Error 'Duplicate entry '1001-164761-0' for key 'PRIMARY''

高性能Mysql主从架构的复制原理及配置详解

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

2015-09-16 mysql 主从原理、 同步常见异常及恢复方法

1.原理 MySQL复制技术有以下一些特点:            (1)    数据分布 (Data distribution ) (2)    负载平衡(load balancing)             (3)    备份(Backups)           (4)    高可用性和容错行 High availability and failover 整体上来说,复制有3个步骤: (1)    master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,

mysql主从中断

Mysql主从复制中断一例 收到mysql主从中断报警,马上登上服务器查看,发现是中继日志损坏. Show slave status\G,提示中继日志损坏.  Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog'

一键完成MySQL主从部署.

环境声明: 主从服务器位于 192.168.0.0/24 网段 master-->IP:192.168.0.88 master-->IP:192.168.0.89 在Master---主数据库的脚本  master-IP: 192.168.0.88 #!/bin/sh # Function: This is used for mysql-master role # made by zhigang.wang # contact: [email protected] MYUSER=root MYP

mysql主从切换维护时的几点注意

随着业务量的不断增加,数据库的压力总是会越来越大的,如果是要对mysql数据库的硬件升级,势必是要对mysql主从做切换,mysql的主从复制的结构如果不借助第三方工具时做mysql的高可用,要做主从的切换是要做停机维护手动切换的,这里就以普通的一主一从的结构中简单的说一说mysql数据库主从切换的几个要注意的点: 1.server id以前看见很多人在做主从切换的时候没有注意到这一点,导致slave IO报错,包括自己也有过,这个还是要稍微注意下,尤其是在mysql的大规模集群下 2.在主从切

利用Zabbix监控mysql主从

mysql主从监控 #脚本如下,截取主从关键字 cat check_mysql_slave.sh  #!/bin/bash # declare -a 定义数组,slave_is 会被视为数组 declare -a slave_is slave_is=($(/data/mysql/bin/mysql -e "show slave status\G"|grep -E "Slave_IO_Running|Slave_SQL_Running:"|awk '{print $2

Lvs+keepalived+mysql主从热备

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Calibri", "sans-serif" } h1 { margin-top: 17.0pt; margin-right: 0cm; margin-bottom: 16.5pt; margin-left

mysql主从同步错误记录。

mysql主从同步失败,原因是主跟从已经有相同的数据在里面了. 解决方法:在从库的/etc/my.cnf里添加如下代码 [mysqld] slave-skip-errors = 1032,1062,1007,1050 案例一: mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send eve