不关机 主从配置mysql_mysql主从配置

MySQL主从原理非常简单,总结一下:

每个从仅可以设置一个主。

主在执行sql之后,记录二进制 log文件(bin-log)。

从连接主,并从主获取 binlog,存于本地relay-log,并从上次记住的位置起执行 sql,

一旦遇到错误则停止同步。

从这几条Replication 原理来看,可以有这些推论:

主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。

如果主从的网络断开,从会在网络正常后,批量同步。

如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这

个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。

一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。

如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

可以应用在读写分离的场景中,用以降低单台 MySQL服务器的I/O

可以实现MySQL服务的HA 集群

可以是1主多从,也可以是相互主从(主主)

说明: 以下文档为在同一个机器上,配置两个 mysql服务,在我们上课的时候,会用

两台单独的机器来演示,但步骤基本上一样。

1.安装配置mysql

进入/usr/local/src下载

wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.73-linux-i686-glibc23.tar.gz

初始化MySQL

#tar zxvf /usr/local/src/mysql-5.1.73-linux-i686-icc-glibc23.tar.gz //解压

#mv mysql-5.1.73-linux-i686-icc-glibc23 /usr/local/mysql //挪动位置

#useradd -s /sbin/nologin mysql //建立 mysql 用户

#cd /usr/local/mysql

#mkdir -p /data/mysql // 创建 datadir,数据库文件会放到这里面

#chown -R mysql:mysql /data/mysql //更改权限

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

配置 mysql

拷贝配置文件

#cp support-files/my-large.cnf /etc/my.cnf

拷贝启动脚本文件并修改其属性

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

#chmod 755 /etc/init.d/mysqld

修改启动脚本

#vim /etc/init.d/mysqld

需要修改的地方有 “basedir=/usr/local/mysql;datadir=/data/mysql” (前面初始化数据库时定义的目录)。

为了做实验方便,我们在同一台机器上配置两

个MySQL服务(跑两个端口)。

#cd /usr/local/

#cp -r mysql mysql_2

#cd mysql_2;

初始化mysql2

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

拷贝配置文件

#cp /etc/my.cnf ./my.cnf

修改配置文件相关参数

#vim my.cnf

更改port为3307 以及socket为/tmp/mysql2.sock

cp /etc/init.d/mysqld /etc/init.d/mysqld2

vim /etc/init.d/mysqld2

更改如下内容:

basedir=/usr/local/mysql_2

datadir=/data/mysql2

conf=$basedir/my.cnf

保存退出,然后启动mysql2

/etc/init.d/mysqld2 start

配置主从准备工作

我们设定/usr/local/mysql_2 为主,端口3307,/usr/local/mysql为从,端口为 3306。

在主上创建测试库

#mysql -uroot -S /tmp/mysql2.sock -e "create database db1;"

然后导出主的mysql库数据然后导入给db1

#mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql

#mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql

配置主(master)

#vim /usr/local/mysql_2/my.cnf

修改或添加:

server-id=1

log-bin=mysql-bin

两个可选参数(2 选1):

binlog-do-db=db1,db2 #用来指定需要同步的库

binlog-ignore-db=db1,db2 #指定忽略不同步的库

修改配置文件后,重启 mysql_2

#pid=ps uax |grep mysql2.sock |grep -v grep |awk '{print $2}' ; kill $pid; cd

/usr/local/mysql_2/bin/; ./mysqld_safe --defaults-file=../my.cnf --user=mysql & ##/etc/init.d/mysqld2 restart

设置root密码

#mysqladmin -u root -S /tmp/mysql2.sock password 'a123456bc'

#mysql -u root -S /tmp/mysql2.sock -pa123456bc

然后授权给从一个用来同步数据的用户 repl

grant replication slave on . to 'repl'@'127.0.0.1' identified by '123123';

flush privileges;

flush tables with read lock;

show master status; #一定要记住前两列的内容,后面会用到

设置从(slave)

vim /etc/my.cnf

修改或增加

server-id = 2 #这个数值不能和主一样

可选参数replicate-do-db=db1,db2 和 replicate-ignore-db=db1,db2,意义同主的那两个可

选参数,如果主已经定义过了,那么从上就不用再次加这些参数了。然后重启 mysqld 服务。

service mysqld restart

拷贝主的db1库数据到从

#mysqldump -uroot -S /tmp/mysql2.sock -pa123456bc db1 > db1.sql

给从上创建db1数据库

#mysql -uroot -S /tmp/mysql.sock -e "create database db1";

然后把db1.sql导入给从库

#mysql -uroot -S /tmp/mysql.sock db1 < db1.sql

登录从mysql

mysql -uroot -S /tmp/mysql.sock

执行如下指令

slave stop;

change master to master_host='127.0.0.1', master_port=3307, master_user='repl',

master_password='123123', master_log_file='mysql-bin.000006', master_log_pos=474952;

slave start;

然后到主上执行

#mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables"

在从上查看状态

show slave status\G;

看是否有如下显示

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

只有两个同时为YES,才算正常。

测试主从

在主上清空db1库的 db表

use db1;

select count() from db";

truncate table db;

进入slave,查看 db1库db表

use db1;

select count() from db;

如果得出的结果为 0了,说明主从是同步的。

然后在主上删除表 db

drop table db;

在从上看db表不存在了

select count(*) from db;

建议: MySQL主从机制比较脆弱,谨慎操作。如果重启 master,务必要先把 slave停掉,

也就是说需要在slave 上去执行slave stop命令,然后再去重启 master的 mysql 服务,否则

很有可能就会中断了。当然重启完后,还需要把slave 给开启slave start。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值