Linux服务器配置MySQL的主从备份

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中,是否已经被修改。

你可能感兴趣的:(linux,mysql,MySQL,Linux,分布式)