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

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

[复制链接]

尚未签到

发表于 2018-10-3 07:39:23 | 显示全部楼层 |阅读模式
  MySQL的主从配置
  MySQL Replication 又叫做AB复制或者主从复制。它主要用于MySQL的时时备份或者读写分离,可以配置两台mysql服务器,或者在一台服务器上配置两个端口,本篇文章使用第二种方法。
  一、首先配置好第一个mysql服务器,配置方法可参考:
  http://daixuan.blog.51cto.com/5426657/1717409
  二、安装第二个mysql
  1、拷贝并且修改配置文件
  [root@daixuan local]# cp -r mysql mysql_slave
  [root@daixuan local]# cd mysql_slave
  [root@daixuan mysql_slave]# mkdir /data/mysql_slave
  [root@daixuan mysql_slave]# chown -R mysql:mysql /data/mysql_slave
  [root@daixuan mysql_slave]# cp /etc/my.cnf  .
  [root@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目录
  [root@daixuan mysql_slave]# pwd
  /usr/local/mysql_slave
  [root@daixuan mysql_slave]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave
  [root@daixuan mysql_slave]# ls /data/mysql_slave/   //初始化数据库后有两个目录
  mysql  test
  2、配置slave
  [root@daixuan mysql_slave]# cd /etc/init.d
  [root@daixuan init.d]# cp mysqld mysqld_slave
  [root@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
  
  方法一:
  [root@daixuan init.d]# /etc/init.d/mysqld_slave start  //启动mysql_slave
  Starting MySQL. SUCCESS!
  方法二:
  [root@daixuan mysql_slave]# cd bin
  [root@daixuan bin]# ./mysqld_safe --defaults-file=../my.cnf --user=mysql &
  如果以后想开机启动,就把它加入/etc/rc.d/rc.local文件中:
  [root@daixuan bin]# echo "./mysqld_safe --defaults-file=../my.cnf --user=mysql &" >>/etc/rc.d/rc.local
  [root@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
  [root@daixuan init.d]# ls /tmp/
  mysql_slave.sock  mysql.sock
  使用mysql.sock登录的是master,mysql_slave.sock登录的是slave
  [root@daixuan mysql_slave]# mysql -uroot -S /tmp/mysql.sock 或者使用命令
  [root@daixuan ~]# mysql -h127.0.0.1 -P3306
  mysql> create database db1;
  mysql> use db1
  mysql> show tables;
  Empty set (0.00 sec)
  把mysql库的数据复制给它:
  [root@daixuan ~]# mysqldump -S /tmp/mysql.sock mysql >123.sql
  [root@daixuan ~]# mysql -uroot -S /tmp/mysql.sock db1 < 123.sql
  [root@daixuan ~]# mysql -uroot -S /tmp/mysql.sock
  mysql> show tables;
  +---------------------------+
  | Tables_in_db1             |
  +---------------------------+
  | columns_priv              |
  | db                        |
  | event                     |
  1. 设置master
  修改配置文件:
[root@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服务,否则不需要重启:
  [root@daixuan ~]# /etc/init.d/mysqld restart
  Shutting down MySQL.. SUCCESS!
  Starting MySQL. SUCCESS!
  [root@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:
[root@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才能生效:
[root@daixuan ~]# service mysqld_slave restart  
Shutting down MySQL. SUCCESS!
  
Starting MySQL. SUCCESS!
  拷贝master上的db1库的数据到slave上,因为master和slave都在一台服务器上,所以操作起来简单了很多,如果是不同的机器,可能就需要远程拷贝了,希望你注意这一点:
  [root@daixuan ~]# mysql -S /tmp/mysql_slave.sock -e "create database db1"//创建数据库db1
  [root@daixuan ~]# mysql -S /tmp/mysql_slave.sock db1 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上执行一步:
[root@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上执行如下命令:
  [root@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上的该表数据:[root@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.
  参考:http://www.apelearn.com/study_v2/chapter25.html



运维网声明 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-607826-1-1.html 上篇帖子: MySQL 参数文件及参数 下篇帖子: 安装Tengine php mysql-devops
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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