標籤:enable check 複製 名稱 efi medium show pass host
MySQL支援的複製類型:
1) 基於語句的複製。在主伺服器上執行的SQL語句,在從伺服器上執行同樣的語句。MySQL預設採用基於語句的複製,效率比較高;
2) 基於行的複製。把改變的內容複寫過去,而不是把命令在從伺服器上執行一遍;
3) 混合類型的複製。預設採用基於語句的複製,一旦發現基於語句無法精確複製時,就會採用基於行的複製;
MySQL主從複製的原理:
1) 在Master中每個事物更新資料完成之後,寫入二進位日誌中;
2) slave的I/O線程監控Master的二進位日誌,一旦日誌發生變化,就將變化的部分讀取並寫入到slave的中繼日誌中去;
3) slave中的SQL線程監控中繼日誌,一旦發生變化讀取變化的內容,之後重放(重新執行一遍SQL語句),實現mysql資料的同步。
主MySQL伺服器(master)------從MySQL伺服器(slave)配置
mount /dev/cdrom /mnt/ //掛載光碟片使用yum
1、安裝yum,把需要的安裝包放在伺服器裡面,yum會自動安裝依賴關係
[[email protected] ~]# rm -rf /etc/yum.repos.d/*[[email protected] ~]# vim /etc/yum.repos.d/yum.repo
[yum]name=yum installbaseurl=file:///mnt/enabled=1gpgcheck=0
2、安裝mysql伺服器
#!/bin/bash#安裝Mysql服務#初始化當前所處的路徑pwd_dir=`pwd`#######################[初始設定變數]########################mysql源碼包的名稱mysql_package_name=‘mysql-5.5.22.tar.gz‘#cmake源碼包的名稱cmake_package_name=‘cmake-2.8.6.tar.gz‘#mysql安裝路徑mysql_install=‘/usr/local/mysql‘#mysql解壓出源碼包目錄的名稱mysql_package_dir=‘mysql-5.5.22‘#cmake解壓出源碼包目錄的名稱cmake_pachage_dir=‘cmake-2.8.6‘#源碼包解壓存放路徑code_package_dir=‘/usr/src/‘#依賴包的檔案名稱subjoin_package_file=‘ncurses-devel-5.7-3.20090208.el6.x86_64.rpm‘###########################[END]#############################卸載rpm方式的安裝的mysql服務rpm -e mysql-server --nodeps &> /dev/null#檢查依賴包rpm -q ncurses-devel &> /dev/nullif [ $? -ne 0 ]then rpm -ih $subjoin_package_fiel --nodepsfi#編譯安裝cmaketar zxvf $cmake_package_name -C $code_package_dir &> /dev/nullcd $code_package_dir$cmake_pachage_dir./configure &> /dev/nullgmake &> /dev/nullgmake install &> /dev/nullcd $pwd_dir#編譯安裝msyqltar zxf $mysql_package_name -C $code_package_dir &> /dev/nullcd $code_package_dir$mysql_package_dircmake -DCMAKE_INSTALL_PREFIX=$mysql_install -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWHIT_CHARSETS=all &> /dev/nullmake &> /dev/nullmake install &> /dev/null#配置msyqluserdel mysql &> /dev/nulluseradd -M -s /sbin/nologin mysql &> /dev/nullchown -R mysql:mysql $mysql_install &> /dev/nullcp -f ${mysql_install}/support-files/my-medium.cnf /etc/my.cnfln -s ${mysql_install}/bin/* /usr/local/bin/cp ${mysql_install}/support-files/mysql.server /etc/rc.d/init.d/mysqldchkconfig --add mysqldchkconfig mysqld on#初始化mysql$mysql_install/scripts/mysql_install_db --user=mysql --basedir=$mysql_install --datadir=${mysql_install}/data/ &> /dev/nullservice mysqld start &> /dev/nullecho ‘mysql install successful‘MySQL指令碼3、配置主要的MySQL伺服器(master)
修改mysql的設定檔
[[email protected] ~]# vim /etc/my.cnf ...... //省略部分配置內容# Replication Master Server (default)# binary logging is required for replicationlog-bin=master-bin //修改server-id = 1 //主伺服器,數字越小等級越高log-slave-updates=true //修改
[[email protected] ~]# service mysqld restart //重啟服務
主伺服器登入MySQL給從伺服器同步的許可權
[[email protected] ~]# mysql -u root -p
mysql> grant replication slave on *.* to ‘myslave‘@‘192.168.1.%‘ identified by ‘123.com‘;mysql> flush privileges; //強制重新整理
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 338 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
其中File列顯示日誌名,Position列顯示位移量,這兩個值在後面配置從伺服器的時候需要。
Slave應從該點在Master上進行新的更新
配置mysql從伺服器(slave)
server-id = 2 //修改,要低於主mysql,更不能一樣relay-log=relay-log-bin //添加relay-log-index=slave-relay-bin.index //添加
[[email protected] ~]# service mysqld restart //重啟服務
登入MySQL,配置同步
按主伺服器的file資訊和Position位置號更改下面命令中的master_log_file和master_log_pos參數;
[[email protected] ~]# mysql -u root -pmysql> change master to master_host=‘192.168.1.9‘,
master_user=‘myslave‘,master_password=‘123.com‘,
master_log_file=‘master-bin.000001‘,
master_log_pos=338;
mysql> start slave; //開始即時同步
mysql> show slave status\G; //查看同步的狀態資訊*************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: 192.168.1.9 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 338 Relay_Log_File: relay-log-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: Connecting Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 338 Relay_Log_Space: 107 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULLMaster_SSL_Verify_Server_Cert: No Last_IO_Errno: 2003 Last_IO_Error: error connecting to master ‘[email protected]:3306‘ - retry-time: 60 retries: 86400 Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 0
驗證
在主伺服器上建立一個庫,然後在從伺服器上刷,就可以看到我們所建立的庫
master-bin.000001 是一個二進位的檔案,裡面存放的是我們建立庫寫入的sql語句
我們可以用mysqlbinlog命令可以查看mysql的二進位記錄檔,後面跟路徑
[Linux]-MySQL主從複製