数据库是管理与存储数据的仓库,在高访问量的网站服务器上,或者其它服务器上,每时每秒都进行着数据查询。有时候单单一台数据库服务器是远远达不到服务要求的,可以考虑做数据库负载均衡,达到在多台数据库上进行读写分离,这其中的一个步骤,就需要设置数据库的主从同步。
以下实现在两台服务器上实现数据库主从同步,主数据库的IP为192.168.1.38,从数据库的IP为192.168.1.21,两个服务器的Mysql版本最后是一样的,不然可能会出错。
1、创建同步账号
在主数据库上进行以下操作
- mysql>grant replication slave on *.* to 'slave21'@'192.168.1.21' identified by 'redhat';
- mysql>flush privileges;
设置一个密码为redhat的账号slave21,专门用来同步,在192.168.1.21数据库上用此账号登录主服务器,
- [root@localhost ~]# mysql -uslave21 -predhat -h192.168.1.38
成功连接即可,不然要重新设置。
2、设置主服务器my.cnf文件
vi /etc/my.cnf,在[mysqld]下增加以下设置
- log-bin = mysql-bin #设置binary格式
- server-id = 1 #主服务器号
- binlog-do-db = char1 #要同步的数据库,有多个数据库,可多行设置
- binlog-do-db = char2
保存退出,重启Mysql。
3、锁表、导数据
登录主数据库服务器
- mysql>flush tables with read lock;
- mysql>show master status \G
- mysql> show master status \G #以下内容的记下,在从数据库设置时用到
- *************************** 1. row ***************************
- File: mysql-bin.000097
- Position: 1555
- Binlog_Do_DB: char1,char2
- Binlog_Ignore_DB:
- 1 row in set (0.00 sec)
- mysql>
然后把数据库char1,char2导出,并导入到从数据库服务器上,最后在主数据库上解锁。
mysql>unlock tables;
4、从数据库服务器设置
设置my.cnf文件,加入以下句子:
- server-id = 2 #这个id必须是唯一的,并且不能为1
- log-bin = mysql-bin
- replicate-do-db = char1 #设置同步的数据库
- replicate-do-db = char2
- master-host = 192.168.1.38 #主数据库服务器地址
- master-user = slave21 #用心同步数据库账号
- master-password = redhat
- master-port = 3306
- read-only = 1
保存后退出,重启Mysql。登录Mysql,执行以下语句
- mysql>change master to master_host='192.168.1.38',master_user='slave21',master_password='redhat',master_log_file='mysql-bin.000097',master_log_pos=
1555;
以上的master_log_file、master_log_pos就是刚才在主服务器上show master status得到的结果,执行后,启动slave功能,并查看slave状态
- mysql>start slave;
- mysql>show slave status \G
如果slave_IO_running,slave_SQL_running都是Yes状态的话,则说明同步功能成功了,此时可以在主数据库服务器上char1数据库添加一条数据,然后看看从服务器的数据库有没有此数据。
另外,可能有以下原因会产生slave_IO_running的状态是NO而导致同步不成功
(1)同步账号没设置好,或者同步地址(或其它信息)错误。
(2)主从服务器的字符集不一样,此时可以设置为一样的,如default-character-set=utf8
(3)主从服务器的Mysql版本不一样。
阅读(2342) | 评论(0) | 转发(0) |