设为首页 收藏本站
查看: 507|回复: 0

[经验分享] mysql的主从配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-1-4 10:17:43 | 显示全部楼层 |阅读模式
MySQL的主从配置

MySQL Replication 又叫做AB复制或者主从复制。它主要用于MySQL的时时备份或者读写分离,可以配置两台mysql服务器,或者在一台服务器上配置两个端口,本篇文章使用第二种方法。


一、首先配置好第一个mysql服务器


二、安装第二个mysql

1、拷贝并且修改配置文件

[iyunv@daixuan local]# cp -r mysql mysql_slave

[iyunv@daixuan local]# cd mysql_slave

[iyunv@daixuan mysql_slave]# mkdir /data/mysql_slave

[iyunv@daixuan mysql_slave]# chown -R mysql:mysql /data/mysql_slave

[iyunv@daixuan mysql_slave]# cp /etc/my.cnf  .

[iyunv@daixuan mysql_slave]# vim my.cnf //注意,这里修改的是MySQL server,不是client

# The MySQL server

[mysqld]

port            = 3307             //修改端口

socket           = /tmp/mysql_slave.sock  

datadir          = /data/mysql_slave    //添加datadir目录

[iyunv@daixuan mysql_slave]# pwd

/usr/local/mysql_slave

[iyunv@daixuan mysql_slave]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave

[iyunv@daixuan mysql_slave]# ls /data/mysql_slave/   //初始化数据库后有两个目录

mysql  test


2、配置slave

[iyunv@daixuan mysql_slave]# cd /etc/init.d

[iyunv@daixuan init.d]# cp mysqld mysqld_slave

[iyunv@daixuan init.d]# vim !$

vim mysqld_slave

修改:

basedir=/usr/local/mysql_slave

datadir=/data/mysql_slave

conf=$basedir/my.cnf


把文件中的其他的conf=/etc/my.cnf修改为conf=$basedir/my.cnf

# Try to find basedir in /etc/my.cnf

conf=/etc/my.cnf

修改为

# Try to find basedir in /etc/my.cnf

conf=$basedir/my.cnf


3、启动slave

方法一:

[iyunv@daixuan init.d]# /etc/init.d/mysqld_slave start  //启动mysql_slave

Starting MySQL. SUCCESS!

方法二:

[iyunv@daixuan mysql_slave]# cd bin

[iyunv@daixuan bin]# ./mysqld_safe --defaults-file=../my.cnf --user=mysql &

如果以后想开机启动,就把它加入/etc/rc.d/rc.local文件中:

[iyunv@daixuan bin]# echo "./mysqld_safe --defaults-file=../my.cnf --user=mysql &" >>/etc/rc.d/rc.local

[iyunv@daixuan bin]# netstat -lnp | grep mysqld

tcp   0    0 0.0.0.0:3306     0.0.0.0:*      LISTEN      9659/mysqld

tcp   0    0 0.0.0.0:3307     0.0.0.0:*      LISTEN      10436/mysqld


三、配置Replication

登录同一台服务器的两个不同的mysql,首先在master上创建一个库db1

[iyunv@daixuan init.d]# ls /tmp/

mysql_slave.sock  mysql.sock        

使用mysql.sock登录的是master,mysql_slave.sock登录的是slave

[iyunv@daixuan mysql_slave]# mysql -uroot -S /tmp/mysql.sock 或者使用命令

[iyunv@daixuan ~]# mysql -h127.0.0.1 -P3306

mysql> create database db1;

mysql> use db1

mysql> show tables;

Empty set (0.00 sec)

把mysql库的数据复制给它:

[iyunv@daixuan ~]# mysqldump -S /tmp/mysql.sock mysql >123.sql

[iyunv@daixuan ~]# mysql -uroot -S /tmp/mysql.sock db1 < 123.sql

[iyunv@daixuan ~]# mysql -uroot -S /tmp/mysql.sock

mysql> show tables;

+---------------------------+

| Tables_in_db1             |

+---------------------------+

| columns_priv              |

| db                        |

| event                     |


1. 设置master

修改配置文件:

[iyunv@daixuan mysql]# vim /etc/my.cnf

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

server-id=1
log-bin=daixuan

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

binlog-do-db=db1,db2     //设置同步的白名单,同步db1和db2
binlog-ignore-db=db1,db2 //设置同步的黑名单,不同步db1和db2,其他数据库都同步

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

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

[iyunv@daixuan ~]# /etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS!

Starting MySQL. SUCCESS!

[iyunv@daixuan ~]# ls /data/mysql  //可以查看到daixuan开头的bin_log

daixuan.000001  daixuan.index  db1   


设置mysql中传输bin_log的用户,只给rpel赋予replication的权限

mysql> grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123123'; //这里的repl是为slave端设置的访问master端mysql数据的用户,密码为123123,这里的127.0.0.1为slave的ip(因为这里配置的master和slave都在本机)。

mysql> flush privileges; //刷新权限

mysql> flush tables with read lock;  //锁定数据库,此时不允许更改任何数据
mysql> show master status;//查看状态,这些数据是要记录的,一会要在slave端用到
+----------------+----------+--------------+------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------+----------+--------------+------------------+
| daixuan.000001 |      406 |              |                  |
+----------------+----------+--------------+------------------+
1 row in set (0.00 sec)

2. 设置slave

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

[iyunv@daixuan ~]# vim /usr/local/mysql_slave/my.cnf

找到 “server-id = 1” 这一行,删除掉或者改为 “server-id = 2” 总之不能让这个id和master一样,否则会报错。另外在从上,你也可以选择性的增加如下两行,对应于主上增加的两行:

replicate-do-db=db1,db2
replicate-ignore-db=db1,db2

改完后,重启slave,server-id = 1才能生效:

[iyunv@daixuan ~]# service mysqld_slave restart
Shutting down MySQL. SUCCESS!
Starting MySQL. SUCCESS!

拷贝master上的db1库的数据到slave上,因为master和slave都在一台服务器上,所以操作起来简单了很多,如果是不同的机器,可能就需要远程拷贝了,希望你注意这一点:

[iyunv@daixuan ~]# mysql -S /tmp/mysql_slave.sock -e "create database db1"//创建数据库db1

[iyunv@daixuan ~]# mysql -S /tmp/mysql_slave.sock db1<123.sql  //导入备份数据123.sql到db1

使用了一个-e选项,它用来把mysql的命令写到shell中,这样可以方便把mysql操作写进脚本中,它的格式就是 -e "commond" ,

在slave上配置主从了:

[iyunv@daixuan ~]# mysql -uroot -S /tmp/mysql_slave.sock
mysql> slave stop;

Query OK, 0 rows affected (0.06 sec)
mysql> slave start;
Query OK, 0 rows affected (0.01 sec)

其中master_log_file和master_log_pos是在上面使用 show master status 查到的数据。执行完这一步后,需要在master上执行一步:

[iyunv@daixuan ~]# mysql -uroot -S /tmp/mysql.sock -e "unlock tables"

然后查看slave的状态:

mysql> show slave status\G;

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

Slave_IO_Running: Yes
Slave_SQL_Running: Yes


四、测试主从

在master上执行如下命令:

[iyunv@daixuan ~]# mysql -uroot -S /tmp/mysql.sock

mysql> unlock tables;

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db1                |

| mysql              |

| test               |

+--------------------+

4 rows in set (0.01 sec)

mysql> drop database db1;

Query OK, 22 rows affected (0.02 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |      //这里db1数据库已经被删除

| mysql              |     

| test               |

+--------------------+

3 rows in set (0.00 sec)

下面查看slave上的该表数据:

[iyunv@daixuan ~]# mysql -uroot -S /tmp/mysql_slave.sock
mysql> show databases;
+--------------------+
| Database           |      //slave上的db1也已经被删除了,与主是同步的
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-160036-1-1.html 上篇帖子: 使用phpMyAdmin时出现PHP 5.3+is required的解决方案 下篇帖子: 编译安装mariadb 配置文件 服务器 mysql 文章
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表