Mysql的主從復制至少是需要兩個Mysql的服務,當然Mysql的服務是可以分布在不同的服務器上,也可以在一台服務器上啟動多個服務。
首先確保主從服務器上的Mysql版本相同。
一、安裝部署mysql
1、 安裝服務器端:yum install mysql-server
yum install mysql-devel
安裝客戶端: yum install mysql
2、啟動服務
service mysqld start
3、安裝完后執行下面命令進行初始化配置,會要求設置密碼:
/usr/bin/mysql_secure_installation
4、設置允許遠程連接到該mysql服務器
登陸到mysql: mysql -uroot -ptest123
[root@zhoujietest ~]# mysql -uroot -ptest123 #賬號root,密碼test123 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 18 Server version: 5.5.35-log MySQL Community Server (GPL) by Remi Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
這時比如通過navicat連接是是失敗的。需要設置下mysql庫下面的user表:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cmdb | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec) mysql> use mysql; Database changed mysql> update user set host='%' where user='root'; ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' mysql>
雖然提示更新失敗,但實際上是更新成功的。設置允許任意主機連接。
若是進入mysql報這個錯:Access denied for user (using password: YES)
則如下解決:
1)、關閉mysql
service mysqld stop
2)、屏蔽權限
mysqld_safe --skip-grant-table
3)、另起一個終端執行如下:
[root@zhoujietest ~]#mysql -u root mysql>delete from user where user=''; mysql>flush privileges; #這個一定要執行,否則關閉之前的終端錯誤會重現 mysql>\q
二、配置mysql主從同步
准備兩台測試的虛擬機,如上安裝mysql環境,並開啟mysql服務
主master : 192.168.8.10
從slave : 192.168.8.11
1、配置主庫:
1)、授權給從數據庫服務器
mysql>GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.8.11' identified by 'test123456'; mysql>FLUSH PRIVILEGES;
2)、修改主庫配置文件,開啟binlog,並設置server-id,每次修改配置文件后都要重啟mysql服務才會生效
vim /etc/my.cnf
在該配置文件[mysqld]下面添加下面內容:
[mysqld] server-id:master端的ID號;
log-bin:同步的日志路徑及文件名,一定注意這個目錄要是mysql有權限寫入的(我這里是偷懶了,直接放在了下面那個datadir下面);
binlog-do-db:要同步的數據庫名
還可以顯示 設置不同步的數據庫:
binlog-ignore-db = mysql 不同步mysql庫和test庫
binlog-ignore-db = test
修改配置文件后,重啟服務:service mysqld restart
如果啟動失敗,通過cat /var/log/mysqld.log | tail -30 查看mysql啟動失敗的日志,從日志內容尋找解決方案。
3)、查看主服務器當前二進制日志名和偏移量,這個操作的目的是為了在從數據庫啟動后,從這個點開始進行數據的恢復
mysql> show master status; +---------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------+----------+--------------+------------------+ | binlog.000001 | 1304 | cmdb | | +---------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
主服務器已配置好。
2、配置從庫
1)、理所當然也是從配置文件着手,在/etc/my.cnf 添加下面配置:
[mysqld] server-id=2 master-host=192.168.8.10 master-user=rep1 master-password=test123456 master-port=3306 replicate-do-db=cmdb ......
重啟時報錯:mysqld: unknown variable ‘master-host=
說明mysql不認識這些變量,網上搜羅了一番,原因是mysql5.5+版本主從復制不支持這些變量,需要在從庫上用命令來設置:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.10', MASTER_PORT=3306, MASTER_USER='rep1', MASTER_PASSWORD='test123456', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=1304; #后面兩個參數的值與主庫保持一致
2)、啟動slave進程
mysql> slave start; Query OK, 0 rows affected (0.04 sec)
3)、查看slave的狀態,如果下面兩項值為YES,則表示配置正確:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
從庫正在等待主庫更新數據。。。Waitin for master to send event...
三、同步主庫已有數據到從庫
主庫操作:
1、停止主庫的數據更新操作
mysql>flush tables with read lock;
2、新開終端,生成主數據庫的備份(導出數據庫)
[root@zhoujietest ~]# mysqldump -uroot -ptest123 cmdb > cmdb.sql
3、將備份文件傳到從庫
[root@zhoujietest ~]# scp cmdb.sql root@192.168.8.11:/root/
4、主庫解鎖
mysql>unlock tables;
從庫操作:
1、停止從庫slave
mysql>slave stop;
2、新建數據庫cmdb
mysql> create database cmdb default charset utf8;
3、導入數據
[root@ops-dev ~]# mysql -uroot -ptest123 cmdb<cmdb.sql
4、查看從庫已有該數據庫和數據
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cmdb | | mysql | | performance_schema | | test | +--------------------+
此時主從庫的數據完全一致,如果對主庫進行增刪改操作,從庫會自動同步進行操作。
from:https://www.cnblogs.com/zhoujie/p/mysql1.html