window迁移至linux mysql主从同步
A: 测试环境
主服务器: window系统
主库(master):masterhost|masterport|masteruser|masterpassword
mysql:5.7.17 community server
从服务器: linux系统
从库(slave): slavehost|slaveport|slaveuser|slavepassword
mysql:5.7.22 community server
登录数据库
主库:mysql -u masteruser -p --port masterport
从库 mysql -h slavehost -u slaveuser-p --port slaveport
退出数据库
exit
B 主库操作
- 修改mysql配置文件
文件路径:D:\mysql\my.ini (注:window 文件为my.ini, linux 文件为/etc/my.cnf)
文件内容解释:
server-id = 1 这是数据库ID,此ID唯一,主库用默认的1即可,从库调整为2,多个从库的ID依次类推,切不可有相同ID出现,这样会造成同步出错
log_bin=mysql-bin 二进制日志文件,此项必须启用,从库需要通过它进行数据同步。
binlog_do_db=bigdata 需要同步的数据库,如果同步多个库,需要另行重写,
文件配置为:
# Binary Logging.
log_bin=mysql-bin
binlog_do_db=bigdata
binlog_do_db=coins
# Server Id.
server-id=1
- 重启mysql服务
Cmd-> services.msc ->mysql restart
- 建立同步用的数据库账户
主库必须提供一个账户让从库通过此账户进行连接并进行同步,进入mysql后输入下面命令
grant replication slave on *.* to 'slave_account'@'%' identified by '123456';
- 显示主库信息并记录
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 16882020 | bigdata,coins | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
将上面的日志名mysql-bin.000001和偏移量16882020记录下来 - 备份主库数据库并复制到从库服务器上
5.1 确保window和linux数据库字符集相同,避免主从同步错误
Mysql> show create database coins\G;
show variables like ‘%char%’;
Show variables like ‘%collation%’;
5.2 备份主库数据库
主库mysql\bin文件夹处,管理员权限执行命令,
mysqldump -u root -p --port 8806 bigdata > D:\bigdata.sql
mysqldump -u root -p --port 8806 coins > D:\coins.sql
5.3 将数据从window拷贝到Linux中。
Linux文件目录 /data/datafiles/
5.4登录Linux的MySql数据库
mysql -u root -p --port 8806
5.5创建与windows同名的数据库名
Mysql> show databases;
Create database coins;
5.6导入数据
Use coins;
Source /data/datafiles/coins.sql
另一个数据库bigdata同样操作。
C:从库操作
- 修改mysql配置文件
文件路径: /etc/my.cnf
文件添加内容:
server-id=2
- 重启mysql服务
Service mysqld restart
- 手动同步
与主库进行同步,可将下面内容调整好后直接复制到mysql命令行下,这样不容易出错
设置连接MASTER MASTER_LOG_FILE为主库的File,MASTER_LOG_POS为主库的Position,就是在主库记录的那2个值
Mysql>change master to
master_host = 'masterhost ',
master_user='slave_account',
master_password='123456',
master_port=masterport,
master_log_file='mysql-bin.000001',
master_log_pos=16882020;
- 启动slave服务
Start slave;
- 检查从库是否正常同步
mysql>show slave status \G;
当Slave_IO_Running 和 Slave_SQL_Running 两列的值都为 "Yes",表明 Slave 的 I/O 和 SQL 线程都在正常运行,如果出现错误,可以从Last_Error这个参数中看出哪里出错,然后进行排查。