mysql主從數據庫,分庫分表等筆記 1、mysql的目錄:在rpm或者yum安裝時:/var/lib/mysql 在編譯安裝時默認目錄:/usr/local/mysql 2、用rpm包安裝的MySQL是不會安裝/etc/my.cnf文件的, 至於為什麼沒有這個文件而MySQL卻也能正常啟動和作用,在點有兩個說法, 第一種說法,my.cnf只是MySQL啟動時的一個參數文件,可以沒有它,這時MySQL會用內置的默認參數啟動, 第二種說法,MySQL在啟動時自動使用/usr/share/mysql目錄下的my-medium.cnf文件,這種說法僅限於rpm包安裝的MySQL, 解決方法,只需要復制一個/usr/share/mysql目錄下的.cnf文件到/etc目錄,並改名為my.cnf即可。 在/usr/share/mysql目錄下有很多語言目錄和mysql多個適用於不同類型項目的對應配置文件 3、配置mysql的字符集設置: 在配置文件中 在socket = /var/lib/mysql/mysql.sock後添加default-character-set = utf8 (決定了客服端字符集和連接字符集) 在myisam_sort_buffer_size = 8M後添加character-set-server = utf8 (決定了服務器字符集和數據庫[數據庫,表,字段]字符集,由於繼承關系),添加collaction-server=usf8_general_ci (這是設置校驗字符集,作用於排序有關order by) 4、開啟mysql的log-bin: 配置文件中開啟 log-bin=mysql-bin (等於後面的內容可以隨便寫,mysql-bin只是說明log-bin的內容寫入mysql-bin裡面而已),重啟mysql後,在/var/lib/mysql下能發現 mysql-bin.000001和mysql-bin.index,說明mysql-bin已經開啟 5、關於mysqlbin的一些命令 mysql提示符下查看bin-log日志 show master status; #顯示最後一個bin-log日志和它的最後一個位置 show master logs; #查看所有的bin-log日志,同時標記最後一個pos位置 6、使用mysqlbinlog命令來查看binlog日志 如果提示字符集錯誤---mysqlbinlog: unknown variable 'default-character-set=utf8' ,可以mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001來忽略字符集錯誤 7、什麼時候會產生一個新bin-log日志 1)重啟mysql服務 2)flush logs; #刷新bin-log日志,會產生一個新的bin-log日志 如:mysql-bin.00008 3) reset master; #清空所有在bin-log日志,最後只剩下mysql-bin.00001 且位置為初始位置 需求:公司內真正數據備份與恢復,9:30的時候備份數據,同時刷新bin-log日志,但是10:00數據損壞,如何去恢復9:30以來所有的數據?(在編譯安裝mysql環境下) 1.9:30備份數據: /usr/local/mysql/bin/mysqldump -uroot -p123 test -l -F >/tmp/test.sql -l 將表鎖了(防止在導表的過程中,又有用戶修改或者添加數據),只讀 -F (flush) 刷新bin-log日志(產生新的日志文件,繼續保存後面的日志記錄) 2.9:30-10:00數據都會寫到bin-log /usr/loca/mysql/bin/mysqlbinlog --no-defaults mysql-bin.000003 #只保存增、刪、改的語句 3.10:00數據損壞,如何恢復數據: 1)恢復9:30備份的數據 /usr/local/mysql/bin/mysql -uroot -p123 test </tmp/test.sql 2)恢復9:30-10:00之間的bin-log日志中的增、刪、改語句 /usr/local/mysql/bin/mysqlbinlog --no-defaults --stop-position=367 mysql-bin.000003|/usr/local/mysql/bin/mysql -uroot -p123 test --stop-position 為要恢復數據在logbin的最後日志,可以通過查看日志文件查找位置,還有--start-position表示恢復從該位置以後的數據 4.這樣,數據全部恢復完畢 8、主從數據庫 從mysql服務器: 1.vi /etc/my.cnf server-id = 2 log-bin=mysql-bin master-host=192.168.255.1 master-user=user1 master-password=123 master-port=3306 2.重啟mysql 3.show slave status\G Slave_IO_Running: Yes #從主服務器復制bin-log成功 Slave_SQL_Running: Yes #把復制過來的sql語句執行成功 4.出錯 #原因,與主服務器的最後一個pos位置對接不成功 slave stop; change master to master_host="192.168.10.1", master_user="user1", master_password='123', master_port=3306, #在主服務器上show master status; master_log_file="mysql-bin.000001", master_log_pos= 279; slave start;