码迷,mamicode.com
首页 > 系统相关 > 详细

个人LINUX学习笔记(二)

时间:2015-08-26 20:22:32      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:linux   mysql   master   

Mysql replication(主从)配置

一、Mysql主从应用场景

  • 原理是master上数据更新时会记录一个bin-log,slave会实时同步该bin-log然后slave根据bin-log的sql语句进行相应的操作

  • Mysql主从可以实时备份,保证数据高安全性

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

  • 可以实现Mysql服务的HA集群

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


二、配置mysql服务

  • MySQL Replication 又叫做AB复制或者主从复制。它主要用于MySQL的时时备份或者读写分离。在配置之前先做一下准备工作,配置两台mysql服务器


二、配置repication

把一个mysql作为主(master),另一个mysql作为从(slave). 为了让实验更加像生产环境,所以先在master上创建一个库db1,并且把mysql的库数据复制给它:

[root@localhost bin]# mysql -uroot -p  #登陆进入mysql

mysql> create database db1;
Query OK, 1 row affected (0.01 sec)

mysql> quit

/usr/bin/mysqldump -uroot -p mysql > /home/123.sql  #备份master的mysql库到/home/123.sql
mysql -uroot -p db1 < /home/123.sql  #将/home/123.sql恢复到master的db1库

1. 设置master

修改配置文件:

vim /etc/my.cnf

在[mysqld]部分查看是否有以下内容,如果没有则添加:

server-id=1

log-bin=mysql-bin

除了这两行是必须的外,还有两个参数,你可以选择性的使用:

binlog-do-db=databasename1,databasename2  #设置需要同步的库名

binlog-ignore-db=databasename1,databasename2  #设置忽略不同步的库名

binlog-do-db=需要复制的数据库名,多个数据库名,使用逗号分隔。binlog-ignore-db=不需要复制的数据库库名,多个数据库名,使用逗号分隔。这两个参数其实用一个就可以啦。

如果修改过配置文件需要重启mysqld服务,否则不需要重启:

killall mysqld  #停止mysql

/etc/init.d/mysqld start  #启动mysql

mysql> grant replication slave on *.* to ‘repl‘@‘slave的IP‘ identified by ‘123123‘;  #这里的repl是为slave端设置的访问master端mysql数据的用户,密码为123123,这里的127.0.0.1为slave的ip。
mysql> flush tables with read lock;  #锁定数据库,此时不允许更改任何数据
mysql> show master status;  #查看状态,这些数据是要记录的,一会要在slave端用到
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |   474952 |              |                  |
+------------------+----------+--------------+------------------+

2. 设置slave

先修改slave的配置文件my.cnf:

vim /etc/my.cnf

增加一行“server-id = 2” 总之不能让这个id和master一样,否则会报错,此项必须加在[mysqld]选项下方可生效,另外在slave上,你也可以选择性的增加如下两行,对应于master上增加的两行:

replicate-do-db=databasename1,databasename2

replicate-ignore-db=databasename1,databasename2

改完后,重启slave:

service mysqld restart

拷贝master上的db1库的数据到slave上

/usr/bin/mysqldump -uroot -p db1 > /home/db1.sql  #备份master上的db1到/home/db1.sql

用scp或者用winscp将db1.sql拷贝到slave上并恢复到slave上的db1库

把数据拷贝过来后,就需要在slave上配置主从了:

[root@localhost ~]# mysql -uroot -pyourpassword
mysql> slave stop;
mysql> change master to master_host=‘masterIP‘, master_port=3307,
master_user=‘repl‘, master_password=‘123123‘,
master_log_file=‘mysql-bin.000006‘, master_log_pos=474952;
mysql> slave start;

相信聪明的你一定可以看懂上面的各个参数分别表示什么含义,其中master_log_file和master_log_pos是在上面使用 show master status 查到的数据。执行完这一步后,需要在master上执行一步:

mysql -uroot -p123456 -e "unlock tables"  #解锁master上的表

然后查看slave的状态:

mysql> show slave status\G;

确认以下两项参数都为yes:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes




测试Mysql主从


在master上执行如下命令:

[root@localhost ~]# mysql -uroot -p -e "use db1;select count(*) from db"
+----------+
| count(*) |
+----------+
|        2 |
+----------+
[root@localhost ~]# mysql -uroot -p -e "use db1;truncate table db"
[root@localhost ~]# mysql -uroot -p -e "use db1;select count(*) from db"

+----------+
| count(*) |
+----------+
|        0 |
+----------+

这样清空了db1.db表的数据,下面查看slave上的该表数据:

[root@localhost ~]# mysql -uroot -p -e "use db1; select count(*) from db"
+----------+
| count(*) |
+----------+
|        0 |
+----------+

slave上的该表也被清空了。这样好像不太明显,不妨继续把db表删除试试:

[root@localhost ~]# mysql -uroot -p -e "use db1; drop table db"
[root@localhost ~]# mysql -uroot -p -e "use db1; select count(*) from db"

ERROR 1146 (42S02) at line 1: Table ‘db1.db‘ doesn‘t exist

这次很明显了。

主从配置起来很简单,但是这种机制也是非常脆弱的,一旦我们不小心在从上写了数据,那么主从也就被破坏了。另外如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slave start.



本文出自 “迷茫的IT男孩” 博客,请务必保留此出处http://mimangitboy.blog.51cto.com/4487103/1688518

个人LINUX学习笔记(二)

标签:linux   mysql   master   

原文地址:http://mimangitboy.blog.51cto.com/4487103/1688518

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!