mysql主从复制

 mysql 主从复制

实验拓扑图:

准备工作:两台虚拟机,配置如图示ip并分别安装mysql服务。mysql服务的安装,创建逻辑卷lvm,先分区,pvcreate,vgcreate,lvcreate 。然后挂载逻辑卷,供mysql服务的数据存放。过程就不演示,配置请参考http://zhangxylinux.blog.51cto.com/5041623/890596

mysql1

  1.  启用二进制日志(默认启用)
  2.  创建具有复制权限的用户
  3.  设置server-id 默认为1

mysql2:

  1.  启用中继日志(默认是禁用的,如果不需要的话,可以手动关闭二进制日志)
  2.  设置server-id   #注:一定不能和主服务器id相同
  3.  启动从服务,并指定主服务器参数
安装mysql
1、准备数据存放的文件系统
新建一个逻辑卷,并将其挂载至特定目录即可。这里假设其逻辑卷的挂载目录为/data,而后需要创建/data/mydata目录做为mysql数据的存放目录。
  
  
  
  
  1. 2、新建用户以安全方式运行进程: 
  2. # groupadd -r mysql 
  3. # useradd -g mysql -r -s /sbin/nologin -M -d /data/mydata mysql 
  4. # chown -R mysql:mysql /data/mydata 
  5. # tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local
  6. 安装并初始化mysql-5.5.24 
  7.  
  8. # cd /usr/local/ 
  9. # ln -sv mysql-5.5.24-linux2.6-i686  mysql 
  10. # cd mysql  
  11.  
  12. # chown -R mysql:mysql  . 
  13. # scripts/mysql_install_db --user=mysql --datadir=/data/mydata 
  14. # chown -R root  . 
  15. # cd /usr/local/mysql 
  16. # cp support-files/my-large.cnf  /etc/my.cnf 
  17. 并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行: 
  18. thread_concurrency = 2 
  19. 另外还需要添加如下行指定mysql数据文件的存放位置: 
  20. datadir = /data/mydata 
  21. # cd /usr/local/mysql 
  22. # cp support-files/mysql.server  /etc/rc.d/init.d/mysqld 
  23. # chkconfig --add mysqld 
  24. # chkconfig mysqld on 
  25.  

mysql安装完毕 在mysql2上安装mysql 步骤同mysql1。

最好配置双机互信,简单配置如下,前提是在每个主机上都配置了hosts文件,能解析到mysql1 ,mysql2 即在/etc/hosts下添加192.168.0.33  mysql1.zzu.com mysql1  192.168.0.34 mysql2.zzu.com mysql2 

   
   
   
   
  1. [root@mysql1 ~]# ssh-keygen –t rsa 
  2. [root@mysql1 ~]# ssh-copy-id  -i .ssh/id_rsa.pub @mysql2  
  3. 在mysql2上执行同样的命令即可 
准备工作完毕,配置mysql,按照需要配置每个步骤
1步:默认即可
2步:创建具有复制权限的用户repluser 
   
   
   
   
  1. mysql> grant replication slave,replication client on *.* to [email protected] identified by 'redhat'; 
  2. Query OK, 0 rows affected (0.02 sec) 
  3.  
  4. mysql> flush privileges; 
  5. Query OK, 0 rows affected (0.00 sec) 
3步,设置server-id 默认为1 即可
在mysql2上修改配置文件my.cnf
关闭log-bin=mysql-bin,添加relay-log=mysql-relay,并设置server-id为2 即可
注意:要先初始化之后再关闭log-bin=mysql-bin,否则出现错误。
执行[root@mysql2 mysql]# /usr/local/mysql/bin/mysql
 mysql> show global variables like '%log%';

查看主服务器使用的日志,在从服务器上确定从那位置开始复制

   
   
   
   
  1. mysql> change master to master_host='192.168.0.33',master_user='repluser',master_password='redhat',master_log_file='mysql-bin.000002',master_log_pos=354
  2. Query OK, 0 rows affected (0.11 sec) 
所以此时master_log_file要等于mysql-bin.000002 master_log_pos要等于354,在/data/mydata下将产生一个master.info文件

启动从服务器
执行mysql> start slave 即可启动从服务器,其状态为yes

在主服务器上创建一个数据库,或者创建一张表,查看从服务器,就可以看到在主服务器上创建的表。 在主服务器上执行

再从服务器上查看数据库

此时一个简单的主从服务器就配置好了,在主服务器上创建表或者写入数据都可以同步写入到从服务器上,起到了数据库复制的租用,但是此时从服务器上有个缺陷,从服务器上也可以写数据的,可以执行一个命令来禁止往从服务器中写入数据。
 
  
  
  
  
  1. mysql> set global read_only=1
  2. Query OK, 0 rows affected (0.01 sec) 
  3.  
  4. mysql> show global variables like 'read_only' ; 
  5. +---------------+-------+ 
  6. | Variable_name | Value | 
  7. +---------------+-------+ 
  8. | read_only     | ON    | 
  9. +---------------+-------+ 
  10. 1 row in set (0.00 sec) 
  11. 此时从服务器就不可以写数据了 
此时就不可以往从服务器中写入数据了,如果不想让从服务器线程在mysql服务启动时自动启动,则可以在从服务器中设置skip-slave-start=1
为防止主服务器突然崩溃,可以在主服务器上设置
sync_binlog=1
innodb_flush_logs_at_trx_commit=1
此处简单实现了主从复制,两服务器之间还可以实现主主复制。过几天不忙了再给大家写出来哈,敬请关注。
 
 

你可能感兴趣的:(mysql,存储,主从复制)