// Ubuntu 18.04.1 LTS apt-get 安裝 $sudo apt-get install mysql-server
apt會自動安裝依賴庫和client。默認安裝目錄 /etc/mysql。 安裝後能夠 service mysql status 查看MySQL狀態html
安裝MySQL沒有提示設置密碼,有時會出現進不去MySQL客戶端的狀況,一是密碼不對,二是沒有設置默認密碼mysql
報錯:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)web
兩種辦法登陸後修改密碼sql
// 1.中止服務 $sudo /etc/init.d/mysqld stop // 2.跳過驗證 在[mysql]組下添加一行:skip-grant-tables $sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf // 3.啓動服務 $sudo /etc/init.d/mysqld start // 4.免密碼登陸後設置密碼 $use mysql $update user set authentication_string=password('123456') where User='root' $flush privileges // 5.刪除:skip-grant-tables $sudo vim /etc/mysql/mysql.conf.d/msyqld.cnf // 6.重啓服務 $sudo /etc/init.d/mysqld restart
// Ubuntu默認密碼所在文件
// 找到password對應的值 登陸數據庫 而後修改密碼 退出重啓(重複方法一456步) sudo cat /etc/mysql/debian.cnf
方法三:版本較高的mysql可能第一次不須要輸入密碼數據庫
mysql -u rootubuntu
默認狀況下 MySQL不容許遠程連接,程序交互時可能須要開啓。vim
// 打開配置文件,註釋掉綁定IP(bind-address) 或 指定可連接的ip或 bind-address=*. $sudo vim /etc/mysql/my.cnf // 登陸MySQL 修改數據表,受權root用戶在任意ip('%')訪問任意數據庫(*.*)的任意權限(all privileges).生產環境能夠指定固定用戶名和固定的ip地址。 mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
// 退出重啓數據庫
$sudo service mysqld restart
數據庫備份原理主要是是讀取其餘數據庫變動的語句,而後在本地執行一遍,保證內容一致。在主備模式下,主數據庫將操做寫入一個log文件中,從數據庫建立一個channel,開啓一個讀文件線程,讀取主的log變更保存到本地文件,另外一個執行語句線程執行拉取來的log文件中的sql語句來同步。開始配置前先保證雙方MySQL都容許遠程訪問。先配置主從模式,主主反向再配置一遍便可。安全
假定兩臺服務器:192.168.10.100爲主,192.168.10.101爲備。服務器
配置同步前,最好保證主從數據庫的初始狀態一致。 併發
同步初態步驟 //一、將主服務器要同步的數據庫加鎖,避免同步時發生改變。 mysql> use database_name; mysql> flush tables with read lock;
//2、使用mysqldump工具導出數據:
msyql> mysqldump -uroot -pxxx database_name >database_name.sql
//3、備份完成後,解鎖數據庫:
mysql> unlock tables;
//4、將初始數據導入從數據庫:
mysql> create database database_name;
mysql>use database_name;
mysql>source database_name.sql;
配置前,登陸100的MySQL輸入: show master status\G; 顯示 Empty set;
//編輯MySQL配置文件,在[mysqld]下面添加一些配置信息,保存後重啓MySQL。
$sudo vim /etc/mysql/my.cnf
#主數據庫id爲1,不能相同。
server-id=1
#開啓二進制日誌,指定名字爲mysql-bin
log-bin=mysql-bin
#中繼日誌名,複製線程先把遠程變化複製到此日誌,再執行
relay_log=mysqld-relay-bin
#中繼日誌執行後,變化是否須要計入本身的bianary-log,當此服務器作另外一個服務器的主服務器,須要打開。
log-slave-updates=1
#須要同步的庫,不指定默認同步所有庫
binlog-do-db=dh_sign
#主庫支持讀寫操做,若讀寫分離可配置1
#read-only=0
##也能夠配置不須要同步的庫,其餘庫同步
#binlog-ignore-db=information_schema
#binlog-ignore-db=sys
#binlog-ignore-db=perfromance_schema
##最安全的設置,每次提交事務以前會將二進制同步到磁盤上,保證服務器崩潰時不會丟失事件
sync_binlog=1
##自增設置,在雙主均可以寫入時,會產生自增主鍵的衝突問題,配置錯落自增。自增間隔n是可寫的mysql實例數量
auto-increment-increment=2
auto-increment-offset=1
#GTID模式
gtid-mode=on
enforce-gtid-consistency=1
## slave併發優化
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
保存退出,並重啓MySQL。 service mysqld restart;
再次登陸MySQL,輸出主的狀態。 mysql> show master status\G; 顯示爲:
mysql> show masterstatus\G;
*************************** 1. row ***************************
File: mysql-bin.000059
Position: 1046
Binlog_Do_DB: dh_sign
Binlog_Ignore_DB:
Executed_Gtid_Set: e18aca99-033b-11e9-a3d7-90f1b0f14435:1-46,
f6ea3916-feb6-11e8-9084-04d3b0eb5843:1-71
1 row in set (0.00 sec)
ERROR:
No query specified
能夠看到log文件名,同步log的起始位置、log記錄的庫和忽略庫、Gtid編號信息,說明配置成功。關於Gtid能夠查看:
登陸從服務器(101)的mysql,查看從服務的狀態: show slave status\G; 一樣顯示爲空。
// 若是開啓了Gtid,直接執行此條語句,指定主服務便可。
mysql> change master to master_host='192.168.10.100',master_user='root',master_password='123456',master_port=3306,master_auto_position=1;
// 若是沒有開啓,須要指定log文件位置等。master_log_file和master_log_pos爲剛查看的主庫的log文件和位置。
# mysql> change master to master_host='192.168.10.100',master_user='root',master_password='123456',master_log_file='mysql-bin.000059',master_log_pos=1046;
// 設置主服務可能會有報錯信息,按相關提示輸入指令便可,可能涉及到以下指令:
# STOP SLAVE IO_THREAD FOR CHANNEL '';
# START SLAVE IO_THREAD FOR CHANNEL '';
# STOP SLAVE;
# RESET SLAVE;// 內存中依然保存主庫ip,port等
# RESET SLAVE ALL; // 清空全部slave配置,show slave status\G,爲空。
退出mysql後再次進入(或重啓),再次查看從狀態: show slave status\G; 顯示爲:
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.10.239 Master_User: root Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000016 Read_Master_Log_Pos: 36050 Relay_Log_File: mysqld-relay-bin.000231 Relay_Log_Pos: 454 Relay_Master_Log_File: mysql-bin.000016 Slave_IO_Running: Yes 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: 36050 Relay_Log_Space: 915 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: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 2 Master_UUID: e18aca99-033b-11e9-a3d7-90f1b0f14435 Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: e18aca99-033b-11e9-a3d7-90f1b0f14435:46 Executed_Gtid_Set: e18aca99-033b-11e9-a3d7-90f1b0f14435:1-46, f6ea3916-feb6-11e8-9084-04d3b0eb5843:1-71 Auto_Position: 1 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec) ERROR: No query specified
Slave_IO_Running和Slave_SQL_Running的值都爲Yes時證實能夠從主庫自動同步了,能夠在主庫100 insert,在101 select或delete驗證是否同步。
至此主從配置完成,要配置雙主,只要將步驟反過來再作一遍便可,注意主從server-id配置不能相同。
配置時發現有時會出現主服務在重啓時會改變log文件和位置信息,可能致使從服務配置失效。應按順序來配置。如出現錯誤,嘗試從服務配置後不重啓,從新登陸便可。