Linux環境中MySQL主從同步--添加新的從庫

來源:互聯網
上載者:User

標籤:mysql主從配置   mysql添加從庫   mysql備份視圖函數   mysql備份指令碼   linux安裝mysql   

當前我認為資料庫主從有兩大應用價值:

1.從庫相當於主庫的備份。雖然資料庫的主從並不能代替/取代備份,例如錯誤的資料可能毀掉所有的資料庫,但主從也是在一種可讀的狀態下保持備份的一種實現方式。

2.從庫可以緩解主庫的壓力,能提高效能。由於從庫是唯讀,因此在讀取查詢方面,從庫可以代替主庫,承擔一定的壓力,無論是這些壓力是來自使用者(應用程式)還是開發、營運自己。

MySQL的主從其實並不困難,而且需要做的事情也並不多,mysql官方給出的文檔中對主從也做出了詳細的指導、說明和解釋,但總共也多少篇幅。鑒於很多網友已經詳細敘寫了相關的文檔或文章,此處就能不贅述了(也可以略微參考本文的最後一部分“資料庫主從的配置過程中使用的一些命令和步驟”)。

簡單說幾句關於添加新的從庫的小技巧。

因為添加從庫時,需要知道MASTER_LOG_FILE和MASTER_LOG_POS,雖然通過在master主庫上執行“show master status”能看到當前的MASTER_LOG_FILE和MASTER_LOG_POS,但實際上這種方法只能用於master主庫剛開始用的情況下,即資料庫剛建好,沒有任何資料寫入的情況下,或者能將這些資料先手動同步到從庫中去。

一種較為方便的方法就是,通過mysqldump匯出主庫的資料庫,同時匯出事件、觸發器、函數和視圖,以及master-data,這樣通過查看mysqldump匯出的檔案的前幾行就能找到MASTER_LOG_FILE和MASTER_LOG_POS,這時在將從主庫匯出的sql語句在從庫執行以後,就可以通過這一個MASTER_LOG_FILE和MASTER_LOG_POS,配置好從庫,並開始同步。

關於mysqldump的詳細說明以及MySQL資料庫的的備份指令碼可以參考文章《Linux Shell指令碼之利用mysqldump備份MySQL資料庫(詳細註解)》以及文章中的評論。

通過mysqldump匯出主庫的資料庫,同時匯出事件、觸發器、函數和視圖,以及master-data:

/usr/local/mysql/bin/mysqldump -uusername -hipaddress  -ppassword -Pport --routines --events --triggers --single-transaction --flush-logs --master-data=1 –databases databasename

如果想單獨匯出事件、觸發器、函數和視圖等而不匯出資料,則可以執行:

/usr/local/mysql/bin/mysqldump -uusername -hipaddress  -ppassword -Pport --routines --events --triggers --no-create-info --no-data --no-create-db

此外將一個資料庫主從的配置過程中使用的一些命令和步驟陳列如下,以作參考或備忘:

# Sat Aug 22 11:23:03 CST 2015# Get mysql 5.5.38 for production use# https://downloads.mariadb.com/archive/index/p/mysql/v/5.5.38# https://downloads.mariadb.com/archives/mysql-5.5/mysql-5.5.38.tar.gzwget -c https://downloads.mariadb.com/archives/mysql-5.5/mysql-5.5.38-linux2.6-x86_64.tar.gz# Remove some conflictsrpm -e mysql-server mysqluserdel mysqlrm -rf /usr/local/mysql/rm -f /etc/my.cnf#  Set user and groupgroupadd -r -g 27 mysql useradd -r -u 27 -g mysql mysql -c "MySQL Server" -d /dev/null -s /sbin/nologingroupadd -r mysql useradd -r -g mysql mysql -c "MySQL Server" -d /dev/null -s /sbin/nologin# Install  MySQL database tar zxf mysql-5.5.38-linux2.6-x86_64.tar.gzcp -r mysql-5.5.38-linux2.6-x86_64 /usr/local/mysql# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --explicit_defaults_for_timestamp --skip-name-resolve/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql --skip-name-resolve# Run it temporarily # /usr/local/mysql/bin/mysqld_safe &/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &# Set mysql commands ln -s /usr/local/mysql/bin/mysql /usr/bin/mysqlln -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladminln -s /usr/local/mysql/bin/mysqldump /usr/bin/mysqldumpln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlogln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config# set mysql root password, etc/usr/local/mysql/bin/mysql_secure_installation# Set mysql library ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so.18.0.0ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so.18ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.sols -l /usr/lib64/libmysqlclient.so.18.0.0ls -l /usr/lib64/libmysqlclient.so.18ls -l /usr/lib64/libmysqlclient.sovim /etc/ld.so.conf.d/mysql-x86_64.conf     /usr/lib64/mysql     /usr/local/mysql/libldconfig# Set mysql replication # master dbcp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnfsed -i "[email protected]\t= [email protected]       = [email protected]" /etc/my.cnfsed -i "[email protected]#[email protected][email protected]" /etc/my.cnfsed -i "[email protected]#[email protected][email protected]" /etc/my.cnf# slave dbcp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnfsed -i "[email protected]\t= [email protected]       = [email protected]" /etc/my.cnf# read errors from logscat /usr/local/mysql/data/`hostname`.err# Some reference# server-id = 101# log-bin=/usr/local/mysql/data/bin-log# max_binlog_size = 1500M# binlog_cache_size = 128K# binlog-do-db = devdbops# binlog-ignore-db = mysql# log-slave-updates# expire_logs_day=2# binlog_format=mixed# end mysql temporarilykill -TERM `ps -ef | awk ‘/mysqld_safe/ && ! /awk/ {print $2}‘` || kill -KILL `ps -ef | awk ‘/mysqld_safe/ && ! /awk/ {print $2}‘`ps -ef | awk ‘/mysqld_safe/ && ! /awk/ {print $2}‘kill -TERM `ps -ef | awk ‘/mysqld/ && ! /awk/ {print $2}‘` || kill -KILL `ps -ef | awk ‘/mysqld/ && ! /awk/ {print $2}‘`ps -ef | awk ‘/mysqld/ && ! /awk/ {print $2}‘# Setting sysvinit cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqlchmod +x /etc/init.d/mysql# Start mysql databaseservice mysql startservice mysql status# some operation about replicaion# master dbGRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY "root";FLUSH PRIVILEGES;CREATE USER ‘dev‘@‘%‘ IDENTIFIED BY ‘dev‘;CREATE DATABASE IF NOT EXISTS devdbops;GRANT ALTER,ALTER ROUTINE,CREATE,CREATE ROUTINE,CREATE TEMPORARY TABLES,CREATE VIEW,DELETE,DROP,EXECUTE,INDEX,INSERT,LOCK TABLES,SELECT,UPDATE,SHOW VIEW ON devdbops.* TO ‘dev‘@"%";USE devdbops;CREATE TABLE `testtable` (`id`  int NOT NULL ,`name`  varchar(255) NULL ,`value`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,PRIMARY KEY (`id`));INSERT INTO `testtable` (`id`, `name`, `value`) VALUES (‘0‘, ‘a‘, ‘b‘);# CREATE USER ‘repl‘@‘%.mydomain.com‘ IDENTIFIED BY ‘slavepass‘;# GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘%.mydomain.com‘;# CREATE USER ‘repl‘@‘%‘ IDENTIFIED BY ‘slavepass‘;# GRANT REPLICATION SLAVE ON devdbops.* to ‘replication‘@‘%‘;SHOW MASTER STATUS;SHOW PROCESSLIST \G;SHOW SLAVE HOSTS;QUIT;# slave dbSTOP SLAVE;CHANGE MASTER TO MASTER_HOST=‘192.168.1.101‘,MASTER_USER=‘root‘,MASTER_PASSWORD=‘root‘,MASTER_LOG_FILE=‘mysql-bin.000002‘,MASTER_LOG_POS=107;START SLAVE;SHOW SLAVE STATUS \G;# Read for test

tag:mysql主從配置,mysql添加從庫,mysql備份視圖函數,mysql備份指令碼,Linux安裝mysql

--end--

本文出自 “通訊,我的最愛” 部落格,請務必保留此出處http://dgd2010.blog.51cto.com/1539422/1689171

Linux環境中MySQL主從同步--添加新的從庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.