mysql数据库主从复制

  |   0 评论   |   1,810 浏览

mysql主从复制数据库配置

为了备份一下博客的mysql数据库,想在自己的家里服务器上做一个mysql从库,用来实时备份。先说一下软件安装的环境现状,花了不少时间在配置这个上面,本来是一个挺简单的事情, 但是需要做好也不太容易,遇到了不少问题,下面详细描述下。

博客在线主机

  • 阿里云服务器(ubuntu14.04)
  • 直接使用的是lnmp中的mysql版本号是:Server version: 5.5.37
  • 主要是备份我wordpress站点数据库:wp

家里台式机做的服务器

  • 系统(ubuntu14.04)
  • 使用云安装(apt-get)的方式安装了一个mysql 版本Server version: 5.5.38
  • 上面已经有好几个数据库 ,都是用来做测试用的 暂且就说是 a,b,c三个数据库吧

之前想到要做一个线上的从库, 考虑到直接下载源码安装一个, 但是一直失败,没有找到什么原因, 反正编译安装完就一直不能启动,终于理解为什么别人不用自带的安装了,有些配置什么的 ,都是默认的, 如果想再装一个可能就不好装了。

在上网查找的时候,发现有一个方式是,启动多个实例的方式, 不过我不太清楚能不能这么做,为了保险一点, 我就安装两个mysql了。这样弄起来也方便,别一下出问题了,测试的数据库都没有了。

mysql安装过程(安装两个数据库,一个和原来的一样,一个用来做阿里云上数据库备份)

备份需要卸载的本地数据库

这里主要是做数据迁移, 所以不用备份整个数据库,我只备份了, 自己需要的几个数据库,没有测试过备份整个数据库, 导入会不会有问题

$ mysql -uroot -p passwd -P3306 a > ~/a.sql
$ mysql -uroot -p passwd -P3306 b > ~/b.sql
$ mysql -uroot -p passwd -P3306 c > ~/c.sql
卸载家里服务器的mysql

一定要卸载干净, 不然安装的时候怕失败

sudo apt-get remove mysql-common mysql-server
新建mysql数据库安装目录

注意我这里用的是root安装,如果不是root的话, 记得加sudo

# mkdir /usr/local/mysql  //创建安装目录
# mkdir /usr/local/mysql/data  //创建数据仓库目录(不创建的话默认就是这个目录即$PREFIX_DIR/data)
//使用下面的命令查看是否有mysql用户及用户组
# cat /etc/passwd 查看用户列表
# cat /etc/group  查看用户组列表
//如果没有就创建
# groupadd mysql
# useradd -g mysql mysql
# chown -R mysql:mysql /usr/local/mysql/ 修改/usr/local/mysql权限
# mkdir /usr/local/mysql3307
# mkdir /usr/local/mysql3307/data 
# chown -R mysql:mysql /usr/local/mysql3307/
下载mysql源码安装
//先安装一下这个工具, 编译的时候需要用到
sudo apt-get install libncurses5-dev

<a href="">官方下载http://downloads.mysql.com/archives/community/ ,找到对应的版本,然后选择源码对应下载。
如下在
<img src="" alt="下载图片" />http://www.swjsj.com/wp-content/uploads/2014/12/QQ图片20141229212754.png

# wget http://downloads.mysql.com/archives/get/file/mysql-5.5.38.tar.gz
# tar xvf mysql-5.5.38.tar.gz
# cd mysql-5.5.38
# sudo mkdir bld
# cd bld
# cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_TCP_PORT=3306
# make&&make install
如果出现这个错误:CMake Error at info_macros.cmake:83 (FILE): 就表示没有写入权限,这里root的话, 没有问题
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18 //只需要操作一次,安装另外一个3307端口的时候不需要

cp support-files/my-medium.cnf /usr/local/mysql/my.cnf //copy配置文件

cp support-files/mysql.server /etc/init.d/mysqld //复制可执行文件

scripts/mysqlinstalldb –defaults-file=/usr/local/mysql/my.cnf –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data –user=mysql

service mysqld start //启动mysql

./bin/mysqladmin -u root -P 3306 password '123456' //启动后, 初始化root密码

3307端口的mysql,和上面的过程是一样的 ,删掉编译后的文件,重新编译安装 涉及到的路径都修改成mysql3307下面的文件,注意都是在mysql3307的目录下面操作,别弄错了,尤其是复制的mysql.server的时候, mysqld换一个名字啊吧,我用的时候mysqld3307

先建好数据库,把之前备份的数据,都导入到端口为3306的数据库中,恢复了默认的数据库, 下面就做从库了。
导入语句 ,进入到/usr/local/mysql目录下

./bin/mysql -uroot -p123456 -P3306 a < ~/a.sql
./bin/mysql -uroot -p123456 -P3306 b < ~/b.sql
./bin/mysql -uroot -p123456 -P3306 c < ~/c.sql

1.首先确保主从服务器上的Mysql版本相同

2.在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE赋予权限,如:
下面的ip地址可以使用域名

GRANT REPLICATION SLAVE ON *.* TO \'slave001\'@\'192.168.0.4\' IDENTIFIED BY \'123456\';

如果建的用户弄错了, 删除用户操作

 mysql>Delete FROM user Where User=\'test\' and Host=\'localhost\';
 mysql>flush privile

3.修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务,log-bin路径自己设置

[mysqld]
log-bin = /home/mysql/log/mysql-bin.log
server-id=1

如果出现下面错误

  • MySQL server PID file could not be found! Starting MySQL . * The server quit without updating PID file (/usr/local/mysql/var/iZ25uo8kuugZ.pid).

重新授权/usr/local/mysql一下给mysql

# chown -R mysql:mysql /usr/local/mysql
# chmod 755 /usr/local/mysql

4.之后可以得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复

>mysql> show master statusG;
*** 1. row ***
            File: mysql-bin.000001
        Position: 457307
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

5.好了,现在可以停止主数据的的更新操作,并生成主数据库的备份,我们可以通过mysqldump到处数据到从数据库,当然了,你也可以直接用cp命令将数据文件复制到从数据库去
注意在导出数据之前先对主数据库进行READ LOCK,以保证数据的一致性

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.19 sec)

之后是mysqldump

mysqldump -h127.0.0.1 -p3306 -uroot -p wp > /home/root/wp.sql

最好在主数据库备份完毕,恢复写操作

mysql> unlock tables;
Query OK, 0 rows affected (0.28 sec)

6.将刚才主数据备份的wp.sql复制到从数据库,进行导入
这里进入mysql3307的目录下面来操作

#mysql -uroot -p123456 wp < ~/wp.sql

7.接着修改从数据库的my.cnf,增加server-id参数,指定复制使用的用户,主数据库服务器的ip,端口以及开始执行复制日志的文件和位置,也即是端口为3307的目录下面的配置文件

直接修改my.cnf下面的server_id=2 其他的不用修改

登陆到3307数据库控制台执行:这里的用户密码是之前在 GRANT REPLICATION新建的用户密码,logfile 就是show master statusG;显示的文件,MASTERLOG_POS也是显示的偏移量

msyql> change master to master_host=\'wp\',master_port=3306,master_user=\'slave001\',master_password=\'123456\',
master_log_file=\'mysql-bin.000001\',MASTER_LOG_POS=457307;

mysql> slave start;

直接在主库上(博客的那个数据库)进行数据修改, 然后去从库里面查找,发现是同样变化的。就表示已经弄好了。如有问题,可以在博客中找我的联系方法,可以一起学习。

评论

发表评论

validate