mysql主从复制实现
先在linux上安装好两台mysql
首先,备份主数据库:
mysqldump --master-data=2 --single-transaction --routines --triggers --events -uroot -p imooc_db > bak_imooc_db.sql
可能会出现这样的错误:
mysqldump: Error: Binlogging on server not active
解决办法:
vi /etc/my.cnf
如果有#log_bin
去掉前面的#号
如果没有就加上log_bin
如下图
重启mysql:service mysqld restart
再执行备份操作:
mysqldump --master-data=2 --single-transaction --routines --triggers --events -uroot -p imooc_db > bak_imooc_db.sql
会看到生成了,bak_imooc_db.sql文件。
将 bak_imooc_db.sql拷贝到10.0.4.181服务器上。(主是:10.0.4.180,从是:10.0.4.181)
scp bak_imooc_db.sql root@10.0.4.181:/root
在10.0.4.181服务器的mysql上创建order_db数据库
mysql> create database order_db charset utf8;
将数据导入order_db中:
[root@node1 ~]# mysql -uroot -p order_db < bak_imooc_db.sql
修改master机器中mysql配置文件my.cnf,该文件在/etc目录下
在[mysqld]配置段添加如下字段
server-id=1
log-bin=log
binlog-do-db=repl //需要同步的数据库,如果没有本行,即表示同步所有的数据库
binlog-ignore-db=mysql //被忽略的数据库
然后登录进入主的mysql,添加用于主从复制的账号。
mysql> create user 'im_repl'@'10.0.4.%' identified by '123456';
对账号授权。
mysql> grant replication slave on *.* to 'im_repl'@'10.0.4.%';
重启master机的mysql服务:service mysqld restart
mysql>show master status;
修改slave机中mysql配置文件
同样在[mysqld]字段下添加如下内容
server-id=2
master-host=192.168.1.222
master-user=repl
master-password=123456
master-port=3306
master-connect-retry=60
# replicate-ignore-db=mysql 忽略的数据库
# master-connect-retry=60 如果从服务器发现主服务器断掉,重新连接的时间差(秒)
#replicate-do-db=repl //同步的数据库(需要备份的数据库名),不写本行 表示 同步所有数据库
然后重启slave机的mysql
在slave机中进入mysql
mysql>start slave;
mysql>show slave status\G;
如果Slave_IO_Running、Slave_SQL_Running状态为Yes则表明设置成功。
关闭slave stop。
在从服务器中建立复制链路。
mysql> change master to master_host='10.0.4.180',master_user='im_repl',master_password='123456',MASTER_LOG_FILE='log.000001', MASTER_LOG_POS=410;
然后执行 slave start;
我们可以通过:
show slave status \G
查看从的状态。如下图,还未开启。
到这里就代表配置成功了。
如果还有疑问,可以看一下这个网站:http://www.cnblogs.com/lben/archive/2012/11/19/2777632.html