mysql主从复制
IP规划:
mysql主:192.168.0.100
mysql从:192.168.0.200
my.cnf配置
主mysql中的[mysqld]项里除了要配置相关参数以外还要配置必要的三项,现将一个最简单的示例:
1[mysqld]
2user=mysql
3pid-file=/var/run/mysqld/mysqld.pid
4socket=/var/run/mysqld/mysqld.sock
5basedir=/usr
6datadir=/var/lib/mysql
7tmpdir=/tmp
8log-bin=master-bin
9log-bin-index=master-bin.index
10server-id=1
11
12备机相应的配置如下:
13[mysqld]
14user=mysql
15pid-file=/var/run/mysqld/mysqld.pid
16socket=/var/run/mysqld/mysqld.sock
17basedir=/usr
18datadir=/var/lib/mysql
19tmpdir=/tmp
20server-id=2
21relay-log=slave-relay-bin
22relay-log-index=slave-relay-bin.index
注:relay项配置的是中继日志和中继索引文件,如果二进制日志文件和中继日志文件名不指定,则默认使用主机名。推荐进行自定义。
重启mysql使上面的配置生效。在主mysql上新建一个用于复制权限的用户:
1mysql> grant replication slave on *.* to 'repl'@'%' identified by 'mysqls';
2上面新建的为用户名repl,密码为mysqls的用户。当然出于安全考虑,可以修改句中的%号为指定主机。
3Query OK, 0 rows affected (0.00 sec)
4当出现上面的提示时,表示已新建用户成功。
5
6mysql> show master status;
7+-------------------+----------+--------------+------------------+
8| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
9+-------------------+----------+--------------+------------------+
10| master-bin.000004 | 224 | | |
11+-------------------+----------+--------------+------------------+
121 row in set (0.00 sec)
在备mysql上指定复制主机的相关信息,并指定要复制的二进制文件和log号
1mysql> change master to master_host='192.168.0.100',master_user='repl',master_password='mysqls',master_log_file='master-bin.000004',master_log_pos=224;
master_host这一项的值建议使用主机名,因为如果遇到IP地址变更的,主机名一般不会变更,所以还是生效的。但IP变了,这里还是用的IP ,就会导致主机无法找到对应的主设备。
1启用slave状态
2mysql> start slave;
3使用show slave status查看是否配置成功:
4mysql> show slave status;
结果太多,我这里就不再复制,但主机看下面的两处,如果看到值是yes,表示已经成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
验证数据的同步,主mysql上进行建库,建表,并插入测试数据:
1mysql> create database repl;
2mysql> create table my(id int(3),name char(10));
3mysql> insert into first_tb values (001,'test');
以上操作在主机上每操作一步,都可以在备机上看到也有相应的库、表、值的增加。
干脆来个狠的,在主mysql上利用批处理,加入1000条数据。测试数据:
1#!/bin/bash
2for (( i=0;i<1000;i++))
3do
4m=tr -dc A-Z-a-z</dev/urandom |head -c 5
5mysql -uroot -ptest repl -e "insert into my values ($i,'"$m"')"
6done
在备机上,对应上面的主机的操作,都可以查看到相应的数据。
1mysql> show databases;
2mysql> use repl;
3mysql> show tables;
4mysql> select * from my;
上面的操作都是在主机和备机都是在一个全新安装的环境下进行的测试。而在生产环境中要使用时,先要将双方要同步的数据库同容进行同步。而如果主数据还有应用在使用时,还要刷新数据库并销定数据库。
1mysql>flush tables with read lock;
先利用mysqldump导出所有的数据,并导入到备机。完成后,再在主mysql上解锁
1mysql>unlock tables;
当然如果数据量很大的情况下,利用mysqldump处理是很慢的,这里建议使用复制物理文件进行数据同步。同步操作和上面的相同。
上面的mysql操作同步是对所有库的完全同步,也包括mysql、information_schema这两个库的数据。如果要指定同步的数据库和忽略的数据库还要用到四个参数:
1binlog-do-db=repl
2binlog_ignore_db=mysql
3binlog_ignore_db=information_schema
4replicate-do-db=repl
5replicate-wild-ignore-table=mysql
6replicate-wild-ignore-table=information_schema
当然上面的四个参数使用的时候是有讲究的,使用不当还是有风险的。回头再专门做一个总结吧!
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/mysql-replicate/975.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.