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;