Mysql主/从配置
Mysql支持单向异步复制,一台为主服务器,一台或多台为从服务器。主服务器负责:更新写入二进制文件并维护文件的一个索引跟踪日志循环如:ls /var/log/mysql/
updatelog.000001 updatelog.index
从服务器连接主服务器时候,通知主在日志中记录的最后一次成功更新位置,从开始更新自己。
主/从切分处理客户查询可以减轻负载,主/从都可以select查询,更改必须在主上进行。而且还可以使用一个服务器进行备份,不会干扰主,备份时候主可以继续处理更新。
MySQL使用3个线程来执行复制功能(其中1个在主,另两个在从),当在从服务器发出: START SLAVE时,从服务器创建一个 I/O 线程,连接主并让主发送二进制文件,主创建一个线程将二进制文件发送到从数据目录中本地文件中,即中继日志,第三个线程是SQL线程,从使用此线程读取中继日志并执行日志的更新。
从服务器在数据目录:/usr/local/mysql/var中另外创建两个状态文件:master.info和relay-log.info,这两个文件不会丢失,下此启动服务器时,读取这些文件确定它已经从主服务器读取多少二进制日志,以及处理自己中继日志的程度。
实验环境:两台虚拟机:主:192.168.0.2 从:192.168.0.3
先安装好两台虚拟机,启动mysql服务,互相能ping通
主服务器:
1、#mysql -uroot -p123456
GRANT REPLICATION SLAVE ON *.* to 'bruce'@'192.168.0.%'IDENTIFIED BY '123456' //先授权bruce账户授予REPLICATION SLAVE权限,仅用于复制
create database test1; //建立测试库
use test1
create table user(id int(4),name varchar(20));
insert into user values(1,"mary");
insert into user values(2,"joe"); //建立表,插入数据
flush privileges; //刷新
2、配置 /etc/my.cnf
log-bin=mysql-bin //启动二进制日志系统
server-id = 1 //本地数据库ID表示为主服务器
log-bin=/var/log/mysql/updatelog //设定生成log文件名,路径自己建立
binlog-do-db=test1 //二进制需要同步的数据库名
binlog-do-db=test1 //多库就写多行,一起传过去
binlog-ignore-db=mysql,test //避免同步mysql用户配置,单独摘除
#mkdir /var/log/mysql
chown -R mysql:mysql /var/log/mysql //创建更新日志目录给mysql用户权限
FLUSH TABLES WITH READ LOCK; //mysql执行清空所有表和块写入语句
cd /usr/local/mysql/var
tar czvf /tmp/test1.tar.gz test1 //打包备份主服务器数据目录,传到从服务器/usr/local/mysql/var目录中
scp /tmp/test1. 192.168.0.104:/usr/local/mysql/var
UNLOCK TABLES; //对主服务器进行解锁
#service mysqld restart //重启mysql
3、配置从服务器
server-id = 2 //配置从服务器
master-host = 192.168.0.103 //指定服务器IP
master-user = bruce //指定同步的用户
master-password = 123456 //密码
master-port = 3306 //同步的端口
master-connect-retry = 60 //断点从新连接时间
replicate-ignore-db = mysql //屏蔽对mysql库同步
replicate-do-db = test1 //同步数据库名称
binlog-do-db=test1 //多库就写多行
4、从服务器装主服务器数据库
# tar zxvf test1.tar.gz
#rm -fr test1.tar.gz
#service mysqld restart
mysql>start slave; //启动从服务器线程
mysql> show master status; //验证配置,在主上验证
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| updatelog.000001 | 211 | test1 | mysql,test |
+------------------+----------+--------------+------------------+
mysql>show slave status\G; //验证从服务器
Slave_IO_Running: Yes
Slave_SQL_Running: Yes //都是yes表示成功
5、测试
主服务器:
use test1
create table zhao(id int(4),name varchar(20)); //建立一个表
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| user |
| zhao |
+-----------------+
从服务器:mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| user |
| zhao |
+-----------------+ //测试成功