主服务器操作:
开启 MySQL 服务并新建一个测试数据库
abc:
mysql> create database abc;
Query OK, 1 row affected (0.31 sec)
##创建一个用来同步的用户,指定只能在
192.168.1.102 登录
mysql> grant replication slave on *.*
to 'tongbu'@'192.168.1.102'
identified by '123456quanlian';
修改配置文件:
root@camlit ~: vi /etc/my.cnf
备注:在修改配置文件之前做好该文件
份工作。
[mysqld]
datadir=/usr/local/mysql/var
socket=/tmp/mysql.sock
user=mysql
old_passwords=123456quanlian
##增加下面内容
server_id=1###1 表示 master, 2 表示
slave binlog-do-db=abc ###需要同步
数据库,如果有多个数据库,每个数据库一
binlog-ignore-db=mysql###不需要同步
数据库 log-bin=mysql-bin
[mysqld_safe] ############可不用
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
重启服务:
root@camlit ~:/etc/init.d/mysqld
restart
最后
验证:
mysql> use abc;
mysql> create table test1 (IP
VARCHAR(20),USER VARCHAR(100), MAIL
VARCHAR(100));
然后在从服务器看能否已更新。
mysql> use abc;
mysql> show tables;
+---------------+
| Tables_in_abc |
+---------------+
| test1 |
+---------------+
从服务器操作:
2.2.2 Slave 端设置
和 master 端一样创建一个相同的数据库:
abc
修改配置文件:
root@test2 ~: vi /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/var
socket=/tmp/mysql.sock
user=mysql
old_passwords=123456quanlian
###增加下面内容
server_id=2 log-bin=mysql-bin
master-host=192.168.1.104 master-
user=tongbu master-password=123456quanlian
master-port=3306 master-connect-
retry=10 ###连接次数 replicate-do-
db=abc ###接受的数据库名 replicate
ignore-db=mysql ###不要接受的数据库
[mysqld_safe] ####可不用
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
重启服务:servie mysqld restart
回到主服务器:
mysql > show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000088 | 385 | abc | mysql |
+------------------+----------+--------------+------------------+
回到从服务器:
mysql>stop slave;
mysql>change master to master_log_file='mysql-bin.000088 ',master_log_pos=385;
mysql>slave start;
mysql>show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
自身修改后的参考文件:
主服务器缺少的动作:
Show master status;
从服务器缺少的动作:
mysql>stop slave; |
代码: |
mysql>change master to master_log_file='mysql-bin.000019',master_log_pos=11809679 |
代码: |
mysql>slave start; |
排错:
重新添加需要备份的数据库,在主服务器/etc/my.cnf下
在从服务器的/etc/my.cnf下:
问题:
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1062
原因:
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.
解决办法I:
1.首先停掉Slave服务:slave stop
2.到主服务器上查看主机状态:
记录File和Position对应的值。
mysql> show master status;
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.000020 | 135617781 | | |
+------------------+-----------+--------------+------------------+
1 row in set (0.00 sec)
3.到slave服务器上执行手动同步:
复制代码 代码如下:
mysql> change master to
> master_host='master_ip',
> master_user='user',
> master_password='pwd',
> master_port=3307,
> master_log_file='mysql-bin.000020',
> master_log_pos=135617781;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)
再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 0
解决办法II:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;