MYSQL主从配置

来源:互联网 发布:音响系统测试软件 编辑:程序博客网 时间:2024/05/15 00:54

Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。

(1)首先确保主从服务器上的Mysql版本相同,我使用的是mysql5.6.14版本


一、MYSQL安装

http://blog.csdn.net/u010969226/article/details/44152755


二、场景描述:
主数据库服务器:192.168.10.1,MySQL已经安装,并且无应用数据。
从数据库服务器:192.168.10.2,MySQL已经安装,并且无应用数据。


三、主数据库执行

1、创建同步帐号

mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'192.168.10.2' IDENTIFIED BY '123456';

mysql> flush privileges;


2、开启归档日志

修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务


[mysqld]

log-bin = mysql-bin

server-id=1


binlog-do-db=test                        #指定数据库生成binlog日志,默认所有
replicate-do-db=test                   #复制的数据库,默认所有
binlog-ignore-db=mysql            #不对mysql库进行日志记录操作,默认所有
replicate-ignore-db=mysql       #不复制的数据库,默认所有
relay-log=mysql-relay-bin         
relay-log-index=mysql-relay-bin


3、获取主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复


mysql> show master status\G;

*************************** 1. row ***************************

File: mysql-bin.000003

Position: 243

Binlog_Do_DB:

Binlog_Ignore_DB:

1 row in set (0.00 sec)


4、同步已有数据库及信息(如果是新数据库,可忽悠该步骤)

停止主数据的的更新操作,并生成主数据库的备份,我们可以通过mysqldump到处数据到从数据库;也可以直接用cp命令将数据文件复制到从数据库去。

注意在导出数据之前先对主数据库进行READ LOCK,以保证数据的一致性


mysql> flush tables with read lock;

Query OK, 0 rows affected (0.19 sec)


mysqldump备份:

mysqldump -h127.0.0.1 -p3306 -uroot -p123456 test > /home/chenyz/test.sql


拷贝test.sql到从数据库,执行还原。

mysql -h127.0.0.1 -p3306 -uroot -p123456 

use test;

source test.sql


主数据库备份完毕,恢复写操作


mysql> unlock tables;

Query OK, 0 rows affected (0.28 sec)



四、从数据库执行

1、修改my.cnf配置文件

[mysqld]

server-id=2

log_bin = mysql-bin


binlog-do-db=test                        #指定数据库生成binlog日志,默认所有
replicate-do-db=test                   #复制的数据库,默认所有
binlog-ignore-db=mysql            #不对mysql库进行日志记录操作,默认所有
replicate-ignore-db=mysql       #不复制的数据库,默认所有
relay-log=mysql-relay-bin         
relay-log-index=mysql-relay-bin


2、设置主数据库信息

mysql>change master to
master_host='192.168.10.1',
master_user='mysync',
master_password='123456',
master_log_file='mysql-bin.000003',
master_log_pos=243;


3、启动slave进程


mysql> start slave;


4、show salve status验证


mysql> SHOW SLAVE STATUS\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: localhost

Master_User: root

Master_Port: 3306

Connect_Retry: 3

Master_Log_File: mysql-bin.003

Read_Master_Log_Pos: 79

Relay_Log_File: gbichot-relay-bin.003

Relay_Log_Pos: 548

Relay_Master_Log_File: mysql-bin .003

Slave_IO_Running: Yes

Slave_SQL_Running: Yes


备注:

1、如果 Slave_IO_Running 、Slave_SQL_Running不为yes时,请检查hostname.err错误日志文件。修改好后,重启从数据库即可。

2、如果使用的2台虚拟机是一致的,修改删除/usr/local/mysql/data/auto.cnf重启数据库。

3、一般都是网络问题,或者帐号密码不一致导致Slave_IO_Running 、Slave_SQL_Running不为yes的。

五、测试主从数据库

1、在主数据库执行如下命令:

create databases test2;

use test2;

create table bin( id int(10) primary key auto_increment,name varchar(255));


--删除存储过程
drop PROCEDURE test;
--创建存储过程
create PROCEDURE test()
BEGIN
DECLARE i int;
set i=1;
while i<10000
DO
insert into bin(name) values ('orange'); 
set i=i+1;
end while;
end 


--执行存储过程
call test();

--查询表
select * from bin;



2、在从库上查看,是否存在test2数据库及bin表、test存储过程。


备注:只要保证/usr/local/mysql/data/master.info文件存在,主从数据库重启,从库都会自动同步主库数据。

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.2
                  Master_User: mysync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 486
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 362
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 486
              Relay_Log_Space: 539
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 148
                  Master_UUID: acecae35-a6d9-11e4-8832-000c297b5b16
             Master_Info_File: /usr/local/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL



0 0
原创粉丝点击