774530750 发表于 2018-10-3 07:39:23

mysql的主从配置

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