所谓的数据库主从复制功能就是说把数据库的操作分别分配给主服务器和从服务器,查询一类的操作就发送到从服务器,而更新、修改一类的操作就发送到主服务器。如此一来,就能减轻主服务器的负担。它的优点有许多,可以增强服务器健壮性,要是主服务器出问题了,可以切换从服务器做备份,工作分化!
它的实现过程就是服务器将用户对数据库的更新、修改的操作以二进制格式保存到bina log日志文件里,然后由binlog dump
线程将binary log日志文件传输到从服务器,从服务器通过一个i/o线程将主服务器的binary log日志文件中的操作复制到一个叫relay log的中继日志文件中,从服务器的另外一个sql线程将relay log中继日志文件中的操作依次在本地执行,从而实现主从之间数据的同步。
我的配置环境,主服务器:
os:ubantu; mysql:version5.543;
从服务器:
os:window8; mysql:version:5.58;
主服务器的mysql版本最好就不要高于从服务器mysql版本
下面说说操作:
主服务器:
登陆mysql:
mysql -uroot -p********
登陆后;你键入
SHOW MASTER STATUS;
你会发现没什么变化的,然后下面开始在主服务器上为从服务器设置一个连接账户,让它可以进行主从复制功能;
GRANT REPLICATION SLAVE ON *.* TO 'swon'@'%' IDENTITIED BY 'password';
解释下上一条命令,grant就是允许,REPLICATION SLAVE就是从库复制,swon就是你在从库登陆时的账号,password就是登陆密码,总结起来说就是允许通过在从服务器登陆swon \password进行复制之类的意思,知道就行,不必深究啦。
然后开始配置,打开 /etc/mysql/my.cnf ,加入
[mysqld]log-bin=mysql-binserver-id=1
保存后,退出,然后重新登陆mysql
sudo /etc/init.d/mysql restart
restart成功后,继续
SHOW MATER STATUS;
你会看到
这就配好主服务器的了,这个file表示主服务器正在使用的binlog文件,position的值和binlog文件大小一样。
从服务器:
打开你的从服务器的mysql配置文件,由于每个人的安装路径不一样,只要打开my.ini这个文件就行,在里面加入
[mysqld]log_bin=mysql-binserver_id=2
这个server_id不能与主服务器的server_id一样!然后start 从服务器mysql,注意我的从服务器是在window环境,是要在bin目录下使用mysql命令
mysql -uroot -p*****
这个登陆账号密码要按自己的实际来呀;
然后开始连接主服务器的信息;
CHANGE MASTER TO MASTER_HOST='192.168.1.123',MASTER_USER='swon',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000012',MASTER_LOG_POS=0;
解释下上面这条命令,CHANGE MASTER TO 这个语句是表示指定主服务器的信息,MASTER_HOST指定主服务器的ip 端口,MASTER_USER就是我们刚开始时,在主服务器配置的用户名,MASTER_PASSWORD也是我们在主服务器配置的密码,MASTER_LOG_FILE就是主服务器正在使用的binlog文件,而MASTER_LOG_POS一般默认为零,表示从开始位置开始读。
配置好之后,我们就开启从库,键入
START SLAVE;
然后查看从库状态,键入
SHOW SLAVE STATUS\G
可以看到
要注意的是,Slave_IO_Running,和Slave_SQL_Runnig都必须为YES,还有,Second_Behind_Master必须为0,表示已经开始工作。
配置到此告一段落,我们可以在查看下,
在主服务器中键入;
SHOW PROCESSLIST\G
可以看到
第二条就是处理i/o线程的连接。
然后在从服务器上键入:
SHOW PROCESSLIST\G
可以看到
第二行是i/o线程状态,第三行就是sql线程状态。
到此,我们可以测试下,这个主从复制能不能派上用场了,
在主服务器上创库、创表,插入数据;
完了后,我们在从服务器上看有没有实现同步
可以看到,从服务器也同步创了swon库,然后再看:
至此,已经实现了功能。