首页 > 代码库 > mysql主从

mysql主从

俩台虚拟机 Centos6.5

mysql master 192.168.11.161

mysql slave 192.168.11.135

俩台虚拟机上

yum install mysql mysql-serevr mysql-devel(没有用,防止以后用)

/etc/init.d/mysqld start

mysqladmin -u root password ‘123456‘

chkconfig mysqld on


在mysql master上

(1)

mysql -uroot -p123456

create database tb;

use tb;

create table tbtable(id int(4),name nvarchar(20));

quit

(测试用的库和表)

(2)

server-id=161   (服务器唯一ID,默认是1,一般取IP最后一段,整数1到2的32次方)

log-bin=mysql-bin  #启用日志

binlog-do-db=tb  #指明同步那些数据库

replicate-ignore-db=test  #指明不同步那些数据库

replicate-ignore-db=mysql

replicate-ignore-db=information_schema

port=3306

(3)

登录主库赋予从库权限账号,允许用户在主库上读取日志(用户名: slave密码:123456

mysql -uroot -p123456

grant replication slave on *.* to ‘tbslave‘@‘192.168.11.135‘ identified by ‘123456‘;

为验证账号我们可以在从的机器上用命令作如下测试

mysql -u tbslave -p -h 192.168.11.161 


(4)

显示主库信息

show master status;

mysql> show master status; 




在mysql slave 上

vim /etc/my.cnf

[mysqld]

server-id=135


mysql> slave stop

mysql> change master to master_host=‘192.168.11.161‘,master_user=‘tbslave‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=264;

Query OK, 0 rows affected (0.02 sec)

mysql> slave start;

Query OK, 0 rows affected (0.00 sec)


 show slave status\G;

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

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.11.161

                  Master_User: tbslave

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000003

          Read_Master_Log_Pos: 264

               Relay_Log_File: mysqld-relay-bin.000002

                Relay_Log_Pos: 251

        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: 264

              Relay_Log_Space: 407

              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:

1 row in set (0.01 sec)


ERROR:

No query specified


mysql> 


测试

在主库上新建表,看看从会不会立即同步

主库上:

mysql -uroot -p123456

use tb;

create table tbtest(id int(100),name nvarchar(20),passwd nvarchar(100));

切换到从机上

mysql -uroot -p123456

use tb;

show tables;

如果能看到主库中建立的表那么表示成功同步了(配置好以后主mysql不要重启,重启mysql master的status会发生变化,slave就有问题了,要重新执行change master to master_host=‘192.168.11.161‘,master_user=‘tbslave‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=264;)

在mysql master执行操作,spacer.gif发生变化,



mysql 主主复制

这里才是主主复制的开始,其实方法很简单,我们之前可以实现主从复制也就是说,再把从做为主,主再做为从,就实现主主复制了,不理解那就慢慢看吧,大家注意一点,我是在主从复制完成后在此基础上去完成主主复制的。

1、编辑之前的从服务器,mysql slave

vim /etc/my.cnf

 加入如下内容:

log-bin=mysql-bin

binlog-do-db=tb

replicate-ignore-db=test

replicate-ignore-db=mysql

replicate-ignore-db=information_schema

port=3306

2、重启mysqld使配置生效

/etc/init.d/mysqld restart

(3)

登录主库赋予从库权限账号,允许用户在主库上读取日志(用户名: slave密码:123456

mysql -uroot -p123456

grant replication slave on *.* to ‘tbslave‘@‘192.168.11.161‘ identified by ‘123456‘;

测试

mysql -utbslave -p -h 192.168.11.135 

4mysql slave上登录数据库记录file position

mysql> show master status;

spacer.gif

5 mysql master上

mysql> change master to master_host=‘192.168.11.135‘,master_user=‘tbslave‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=106;

show slave status\G
spacer.gif

看到上两个进程为数据库与另一边的master 已经建立连接

因为我是同步tb数据库所以我做了如下测试 ,测试是通过的

在任意一台master上使用tb数据库插入数据,在另一边的数据库上看数据是否同步

图片丢失了,哎,粘贴不够来。