步骤1–配置主数据库主属性
修改my.cnf配置文件,修改log_bin
、binlog-do-db
、server_id
属性,log_bin
指定日志文件的命名;binlog-do-db
指定需同步的数据库名,不指定的情况下同步所有数据库;server_id
指定数据库唯一id。如:
1 | [mysqld] |
如果这个主数据库是其他另外数据库的从数据库,也就是说需要实现级联(链式)主从复制,则需添加以下属性,来表明开启从数据库日志,实现级联(链式)复制
1 | [mysqld] |
步骤2–重启主数据库
其中mysql为服务名称,根据/etc/init.d/
中对应的数据库服务名,可能为mysqld
、mysql
、mysql.server
。重启完毕后能在data
目录下看到mysql-bin.000001
的同步所需文件,每重启一次数据库,则文件会新增一个,后缀数字将会自动加1。
1 | shell> service mysql restart |
使用账号密码登录mysql命令行,执行以下命令,就能看到当前数据库的主属性信息
1 | mysql> show master status\G; |
结果截图如下图(为保护数据安全,进行了数据库名打码):
步骤3–在主数据库新建slave权限的账号
一般来说会新建一个只有slave权限的账号供主从同步使用,当然使用其他高权限账号,如root也是可以,不过怎么说也是不够安全。
使用账号密码登录mysql命令行,执行以下命令,新建slave权限的账号:
1 | mysql> create user 'username'@'host' identified by 'password'; |
其中host
的通配符为%
,表示所有ip都能连接;databasename
和tablename
通配符为*
。
查看账号权限可用以下命令:
1 | mysql> show grant for 'username'@'host'; |
步骤4–备份主数据库
执行下列命令备份主数据库,用户从数据库的初始化
1 | shell> mysqldump -u[数据库用户名] -p[数据库密码] [数据库名] > [导出路径] |
使用tail
命令查看备份数据文件的最后几行,获取当前备份文件的备份时间,这个时间很重要,需要靠这个时间来确认从数据库的起始同步点,结果如图:
步骤5–配置从数据库从属性1
修改my.cnf配置文件,修改server_id
,可选修改log_bin
、binlog-do-db
属性。这里的server_id
表示数据库的独特标识,所以不能主数据库的server_id
相同,如:
1 | [mysqld] |
步骤6–重启从数据库(同步骤2)
其中mysql为服务名称,根据/etc/init.d/
中对应的数据库服务名,可能为mysqld
、mysql
、mysql.server
。
1 | shell> service mysql restart |
步骤7–从数据库初始化
把步骤3备份出来的数据库文件导入到从数据库主机中,我这边是是用scp命令,由于是内网,所以速度会非常快。
1 | shell> scp [主数据库备份文件路径] [从数据库主机用户名]@[从数据库主机IP(或域名)][从数据库主机将要存放备份文件目录] |
使用账号密码登录mysql命令行,执行以下命令,导入数据库文件到从数据库,以完成从数据库的数据初始化。当然,前提是已经建好了对应的数据库
1 | mysql> use [数据库名]; // 进入指定数据库 |
步骤8–根据主数据库的binlog文件确认同步点
当前主数据库的binlog文件为mysql-bin.000006
。
根据步骤4获取到的备份文件时间,现在就用上了。我们需要依靠这个备份文件时间来获取同步点,即需要查看主数据库binlog文件获取备份文件时间后第一个操作的时间节点,其对应的pos值就是我们所需的同步点。
执行以下命令查看binlog文件在备份文件时间前后约半个小时内的操作记录。由于备份文件时间为2016-07-08 17:15:42
,所以前后大概查看2016-07-08 17:00:00
到2016-07-08 17:30:00
这段时间。当然这段时间是任意设置的,甚至可以查看所有操作记录,慢慢一个个挨着找。
1 | shell> /usr/local/mysql/bin/mysqlbinlog --start-datetime="2016-07-08 17:00:00" --stop-datetime="2016-07-08 17:30:00 mysql-bin.000006" |
由于编码和binlog编码不一样,导致了以下的错误:
这个时候添加参数--no-defaults
即可:
1 | shell> /usr/local/mysql/bin/mysqlbinlog --no-defaults --start-datetime="2016-07-08 17:00:00" --stop-datetime="2016-07-08 17:30:00" mysql-bin.000006 |
接着在结果中慢慢找到刚小于2016-07-08 17:15:42
和刚大于2016-07-08 17:15:42
的位置:
接着就得出214497149
就是为同步点
步骤9–配置从数据库从属性2
步骤5中的从属性是配置mysql配置文件my.cnf
的,而这里是对数据库内容进行配置。
使用账号密码登录mysql命令行,执行以下命令,配置从属性:
1 | mysql> change master to master_host='[主数据库IP]',master_user='[步骤3新建的slave权限账号名]',master_password='[步骤3新建的slave权限账号密码]', |
使用以下命令可查看从同步复制服务的状态:
1 | mysql> show slave status\G; |
至此,主从复制就配置完成了。
(•̀ᴗ•́)و ̑̑