一、需求
? ? 首先公司用的是windows系統,數據庫為SQL Server,但是因為數據獲取速度問題,需要換成Linux系統+mysql數據庫,為了測試是否能提高性能,就在兩臺服務器(windows)安裝虛擬機,然后安裝Linnux操作系統Ubuntu,并安裝mysql。
二、準備
兩臺服務器:winserver2008 + ubuntu(192.168.20.8)+mysql ?主服務器
? ? ? ? ? ? ? ? ? ? ? ? win10 +ubuntu(192.168.20.3)+mysql ?從服務器
同步數據庫名:MyHz
同步賬號:myslave
同步密碼:123456
tip:此時192.168.20.8已經有MyHz數據庫
三、配置
主服務器(192.168.20.8)
1.修改mysql配置文件
vi /etc/mysql/my.cnf
#鍵入 /server-id 找到server-id的位置,把以下內容對照設置進去,鍵入 i,激活輸入狀態
#注意,這里的Master與Slave的server-id不能相同
server-id?????????????? = 1
log_bin???????????????? = mysql-bin
binlog_do_db??????????? = MyHz #如果需要同時同步多個數據庫,請另起一行設置binlog_do_db ? ? ? ? ? ?=需要同步的數據庫名稱
binlog_ignore_db??????? = mysql
2.驗證設置
service mysqld? restart#重啟MySQL
mysql -u root -p#進入mysql控制臺
show variables like 'server_id';#查看server-id的值是否為1
mysql> show variables like 'server_id';
mysql> show master status;??#查看主服務器
tip:這里記住File的值:mysql-bin.000001和Position的值:1599,后面會用到。
2.建立用于replication的賬號,賦予從庫權限帳號,允許用戶在主庫上讀取日志,賦予192.168.20.3也就是Slave機器有File權限,只賦予Slave機器有File權限還不行,還要給它REPLICATION SLAVE的權限才可以
GRANT FILE ON *.* TO 'myslave'@'192.168.20.3' IDENTIFIED BY '123456';
grant replication slave on *.* ?to 'myslave'@'192.168.20.3' identified by '123456' ;#授權用戶slave從192.168.20.3(從服務器)訪問數據庫,只具有備份的權限,grant replication on?數據庫名.表名(*表示數據庫的所有表)
flush privileges; ?刷新系統授權表
3.導出MyHz數據庫(在終端進行,不是在mysq內)
mysqldump -u root -p --default-character-set=utf8 --opt -Q -R --skip-lock-tables MyHz > /home/hnc/MyHz.sql
#在MySQL主服務器進行操作,導出數據庫MyHz到/home/MyHz.sql(在終端執行,而不是在mysql內執行)
4.上傳MyHz.sql文件到從服務器的/home
scp /home/hnc/MyHz.sql 'hnc'@192.168.20.3:/home
#把home/hnc目錄下的MyHz.sql 數據庫文件上傳到MySQL從服務器的home目錄下面
從服務器(192.168.20.3)
1.修改mysql配置文件
#具體的路徑以及版本都與Master服務器一樣
vi /etc/mysql/my.cnf
#請對照設置,如下
user ? ? ? ? = mysql
log-bin ? ? = mysql-bin
server-id??? ??? = 2
replicate-do-db??? ??? = MyHz
replicate-ignore-db??? = mysql
2.驗證設置
mysql> show variables like 'server_id';
tip:需要驗證,如果server_id設置失敗,最后同步的時候有Slave_IO_Running=No失敗
3.導入MyHz.sql到從服務器數據庫
mysql? -u root -p#進入從服務器MySQL控制臺
create database MyHz;#創建數據庫
use MyHz#進入數據庫
source? /home/MyHz.sql#導入備份文件到數據庫
4.執行同步
slave stop;#停止slave同步進程
change master to master_host='192.168.20.8',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000011',master_log_pos=1599;#執行同步語句
slave start;#開啟slave同步進程
SHOW SLAVE STATUS\G#查看slave同步信息
若 ? Slave_IO_Running: Yes
? ? ? ?Slave_SQL_Running: Yes
則 同步成功 !
Tip:
遇到錯誤:Slave_IO_Running:No 從服務器設置server_id失敗
解決:
1.stop slave
2.set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
3.start slave
遇到錯誤:Slave_SQL_Running:No ? ?主鍵重復
解決:通過修改mysql的配置文件,讓從庫的同步線程忽略這個錯誤,方法:修改mysql配置文件 /etc/my.cnf 在 [mysqld]下加一行 slave_skip_errors = 1062 ,保存.重啟mysql. mysql slave可以正常同步了.
遇到錯誤:Slave_SQL_Running:Connecting ??
解決:未給myslave用戶賦予查看文件的權限,導致連接失敗,通過GRANT FILE ON *.* TO 'myslave'@'192.168.20.3' IDENTIFIED BY '123456';可以解決