网站最重要的数据,如果数据异常而你又没有做好备份那是很难恢复的,今天小编教你将两台服务器的mysql数据库进行同步,这样子我们如果我们网站出了问题,我们就可以用最快的速度进行切换,这样子才能不影响用户的访问。
环境:两台机器,已经安装好了mysql(尽量版本相同,版本也可以不相同。两台机器在同一个网络,可以互相ping通)
主机A(master):192.168.1.80 (ubuntu server 11.10 & mysql 5.5.17)
主机B(slave):192.168.1.81(centos 6.3 & mysql 5.1.61)
1: 在master上授权slave的复制账户和权限,使slave可以从主机A上去复制数据。
- mysql>grant all privileges on oa.* to admin@localhost identified by '在这里定义密码';
附:关于mysql授权的一些SQL语句的掌握。
- mysql>grant select,insert,update,delete on *.* admin@localhost identified by '密码';
- mysql>grant select,insert,update,delete on *.* admin@'192.168.1.%' identified by '密码';
-
- mysql> revoke all privileges on *.* from admin@localhost; ← 取消admin用户对数据库的操作权限
- mysql>delete from mysql.user where user='admin' and host='localhost'; ← 删除admin用户
- mysql> flush privileges; ← 刷新,使以上操作生效
2:
添加iptabels规则,mysql的3306端口可以通过# iptabels -A INPUT -m state --state NEW -m tcp -ptcp --dport 3306 -j ACCEPT
3:修改主机A的mysql配置文件my.cnf,并设置编码为UTF-8.- [mysqld]
- #注意:该部分server-id=Master_id必须为1到232–1之间的正整数值。从服务器的ID必须与主服务器的ID不相同。
- server-id =1
- #用户slaver读取的二进制日志文件。
- log-bin=msyql-bin
- #要复制的数据库replication-do-db=oa
- #数据库存放的目录
- datadir=/var/lib/mysql
- socket=/var/lib/mysql/mysql.sock
- # Default to using old password format for compatibility with mysql 3.x
- # clients (those using the mysqlclient10 compatibility package).
- old_passwords=1 ← 找到这一行,在这一行的下面添加新的规则,让MySQL的默认编码为UTF-8
- default-character-set = utf8 ← 添加这一行
- 然后在配置文件的文尾填加如下语句:
- [mysql]
- default-character-set = utf8
4:配置slave ,打开从机B的my.cnf。- server-id =2
5:同步数据库
主机A上master上面需要的同步的数据库比较大时,先锁定数据表,然后导出数据库。再到主机B slave上导入数据库。
- mysql> flush tables with read lock; mysql> show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000583 | 6682 | oa19 | |+------------------+----------+--------------+------------------+1 row in set (0.00 sec)
- 在不停主库的情况下备份数据库,root@80:~# mysqldump-uroot -pxxxx -h127.0.0.1 --databases oa --master-data=1 > bak.sql
6:远程复制到slave上mater关于oa的备份文件。- [root@sample~]#scp /home/back/mysql_bak.$(date +%F).sql.gz root@192.168.1.81:/tmp/
7:到slave上面解压并且导入数据库。- [root@sample~]#gzip -d mysql_bak.$(date +%F).sql.gz
- 在从服务器上导入数据
- [root@sample~]#mysql>source /home/back/mysql_bak.$(date +%F).sql
8:手动同步slave并且开启slave同步。 mysql>change master to master_host='192.168.1.80',
- >master_user='admin',
- >master_password='123456',
- >master_log_file='mysql-bin.000583',
- >master_log_pos=107;
- mysql>start slave;
- mysql>show slave status\G;
- 注意:此处的master_log_pos=107或者master_port=3306处,千万不要添加引号,负责会出现语法的错误。