mysql服务器的主从配置,这样可以实现读写分离,也可以在主库挂掉后从备用库中恢复。
需要两台机器,安装mysql,两台机器要在相通的局域网内,可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
主机A: A: 192.168.29.135
从机
从机B:机B:192.168.29.136(可以有(可以有多台从机)
1、先登录主机 A,在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE(从复制)赋予权限,如:
##grant replication slave on *.* to '帐号' @ '从服务器IP' identified by '密码';
mysql>grant replication slave on *.* to lwj@'j@'192.168.29.136' id' identified by 'lwj1234';
赋予从机权限,有多台从机,就执行多次。
2、 打开主机A的机A的my.cnf,输入f,输入如下:(修改主数据库的配置文件置文件my.cnf,开启f,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务)
server-id = 1 #主机标示,整数
log_bin = /var/log/mysql/ql/master-bin.log # #确保此文件可写,开启bin-log
log_bin_index = /var/log/mysql/ql/master-bin.index
read
read-only =0 #主机,读写都可以
binlog-do-db =ebmall #需要备份哪些数据库,多个写多行
binlog-ignore-db =eb_pool #肯定不需要备份的数据库,多个写多行,没有则注释掉
relay_log = /var/log/mysql/mysqld-relay-bin #记录中继日志
log-slave-updates = YES #从服务器同步后记录日志
可以通过mysql>show variables like ‘log_%’; 验证二进制日志是否已经启动。(log_bin=ON)
3、现在可以停止主数据的的更新操作,并生成主数据库的备份,我们可以通过mysqldump导出数据到从数据库,当然了,你也可以直接用cp命令将数据文件复制到从数据库去,注意在导出数据之前先对主数据库进行READ LOCK,以保证数据的一致性
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.19 sec)
然后mysqldump导出数据到主机的/home/me/copy.sql:
my:
mysqldump -u root -p ebmall > /home/me/copy.sql;
4、得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复。
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000007
Position: 120
Binlog_Do_DB: ebmall
Binlog_Ignore_DB:
1 row in set (0.02 sec)
最好在从数据库备份完毕,恢复写操作。
mysql> unlock tables;
Query OK, 0 rows affected (0.28 sec)
5、将刚才主数据备份的/home/me/copy.sql手动复制手动复制到从数据库,进行导入。
##导入数据库
#mysql -u用户名 -p 数据库名 < 后面参数为脚本文件(如这里用到的.sql)
mysql -uroot -p ebmall < /home/me/copy.sql
#my
#mysql>use 数据库名;
mysql>use ebmall;
#然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source /home/me/copy.sql;
6、修改从数据库的据库的my.cnf,增加f,增加server-id参数;登入mysql,指定复制使用的用户,主数据库服务器的ip,端口以及开始执行复制日志的文件和位置。
server-id = 2
relay_log = /var/log/mysql/ql/slave-relay-bin.log #记录中继日志
relay_log_index = /var/log/mysql/ql/slave-relay-bin.index
#测试能否连接Master.
mysql -h 192.168.150.130 -u jie -p(需要输入'jie'账号的数据库密码)
mysql>change master to
master_host ='192.168.80.98', master_user ='ebmall', master_password ='ebmallpasswd',
master_log_file='mysql-bin.000037', master_log_pos=865;
7、重启mysql服务,然后在从服务器上,启动slave进程
service mysql restart
mysql> start slave;
8、在从服务器进行show salve status验证
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: root
Master_Port: 3306
Connect_Retry: 3
Master_Log_File: mysql-bin.003
Read_Master_Log_Pos: 79
Relay_Log_File: gbichot-relay-bin.003
Relay_Log_Pos: 548
Relay_Master_Log_File: mysql-bin .003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
9、验证
在主机A中,mysql>show master status\G;
在从机B中,mysql>show slave status\G;
能看到大致这些内容
File: mysql-bin.000001
Position: 1374
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
可以在主机A中,做一些INSERT, UPDATE, DELETE 操作,看看主机B中,是否已经被修改。