mysql主从原理图
1、mysql配置文件my.cnf的位置
2、如何启动、停止mysql,找好启动文件
假设有两台机器,已经安装好了mysql(尽量同版本,且两台机器同一网络,可以ping通)
重新启动主服务器的服务时,先关闭备的slave服务,然后再重新启动master主服务。
备SQL不能像主sql写入内容
主机A: 192.168.1.100
从机B:192.168.1.101
可以有多台从机
1、先登录主机 A
mysql>GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.1.101' IDENTIFIED BY '123456';
flush tables with read lock; #主上锁定为只读
赋予从机权限,有多台丛机,就执行多次
2、 打开主机A的my.cnf,输入
server-id = 1 #主机标示,整数
log_bin = mysql-bin #确保此文件可写
read-only =0 #主机,读写都可以
binlog-do-db =test #需要备份数据,多个写多行
binlog-ignore-db=mysql #不需要备份的数据库,多个写多行
mysqldump -uroot -p test > /tmp/test.sql #导出数据库
将test数据库传递到从mysql服务器上。scp /tmp/test.sql [email protected]:/tmp/test.sql
注意:要实施复制,首先必须打开Master端的binary log(bin-log)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。
[root@localhost mysql]# ps aux | grep mysql
root 2026 0.0 0.3 5060 1348 pts/1 S 22:40 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/localhost.localdomain.pid #注意PID与你的hostname是有关系的
3、打开从机B的my.cnf,输入
mysql>create database test
mysql>source /tmp/test.sql #导入主mysql上的test数据库
server-id = 2
master-host =192.168.1.100
master-user =user1
master-pass =123456
master-port =3306
master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db =test #只复制某个库
replicate-ignore-db=mysql #不复制某个库
4、进入slave数据库启动slave
mysql -uroot -p
mysql>slave stop;
mysql>reset slave;
注意:如果slave不一致,可以通过如下的方式修改,数据库5.1.7之后,配置信息就不能写入到my.cnf中,建议通过如下命令完成。
change master to master_host='127.0.0.1', master_port=3306, master_user='repl', master_password='123123';
mysql>slave start;
再在主mysql服务器上的数据库中,执行unlock tables;
4、验证
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000021 | 106 | test,jiang | mysql |
+------------------+----------+--------------+------------------+
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.116
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000021
Read_Master_Log_Pos: 106
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000021
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
Replicate_Do_DB: test,jiang
Replicate_Ignore_DB: mysql
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
注意:主从数据库初始信息要相同,包括表结构、表数据、编码等,如果不相同,则将master主服务器中的信息先备份,然后再导入到从服务器
slave上的数据可能与master上的数据不一致,其原因为mysql-bin.000006文件中,只包含了部分的数据,因为slave是通过mysql-bin文件来同步数据的。
5、主mysql需要重新启动,需安装如下步骤
在slave上执行,首先进入数据库,然后执行slave stop,然后再在master上执行重新启动数据库操作
问题汇总:
ERROR 1201 (HY000):Could not initialize master info structure的问题
今天在做MySQL主从复制时遇到个ERROR 1201 (HY000): Could not initialize master info structure .
出现这个问题的原因是之前曾做过主从复制!
解决方案是:运行命令 stop slave;
成功执行后继续运行 reset slave; #该命令可以重新读取/etc/my.cnf关于数据库slave的配置