Linux CentOS 安裝MySql以及搭建MySql主從復制


前言

在之前的博客中,有過幾篇都寫了關於mysql在linux下的搭建教程,可能以后還會再寫,但是又不想重復在寫, 於是便想單獨將此抽出來,單獨寫成一篇博客,並詳細記錄一些安裝過程以及遇到的問題解決辦法。順便也將MySql的主從搭建教程也寫在一起,方便以后查閱。

一、MySql安裝

在安裝MySql之前,查看是否以及安裝過MySql,如果已經安裝,但是不符合要求的話就卸載。
1,查找以前是否裝有mysql
先輸入:

rpm -qa|grep -i mysql

查看是否安裝了mysql
這里寫圖片描述

2,停止mysql服務、刪除之前安裝的mysql
輸入:

ps -ef|grep mysql

刪除命令
輸入:

rpm -e –nodeps 包名

這里寫圖片描述
如果提示依賴包錯誤,則使用以下命令嘗試

rpm -ev 包名 --nodeps

如果提示錯誤:error: %preun(xxxxxx) scriptlet failed, exit status 1
則用以下命令嘗試:

rpm -e --noscripts 包名

3、查找並刪除mysql目錄
查找結果如下:

find / -name mysql

刪除對應的mysql目錄
具體的步驟如圖:查找目錄並刪除
這里寫圖片描述
注意:卸載后/etc/my.cnf不會刪除,需要進行手工刪除

4、再次查找機器是否安裝mysql

rpm -qa|grep -i mysql

這里寫圖片描述

Mysql有兩種安裝模式,可自行選擇。

1,yum安裝

首先查看mysql 是否已經安裝
輸入:

rpm -qa | grep mysql   

如果已經安裝,想刪除的話
輸入:
普通刪除命令:

rpm -e mysql

強力刪除命令:

rpm -e --nodeps mysql    

依賴文件也會刪除

安裝mysql
輸入:

yum list mysql-server  

如果沒有,則通過wget命令下載該包
輸入:

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm   

下載成功之后,再輸入命令安裝

yum install mysql-server

在安裝過程中遇到選擇輸入y就行了
這里寫圖片描述
這里寫圖片描述

安裝成功后,輸入 service mysqld start 啟動服務
輸入:
mysqladmin -u root -p password '123456'
來設置密碼
輸入之后直接回車(默認是沒有密碼的)
然后再輸入
mysql -u root -p
這里寫圖片描述
通過授權法更改遠程連接權限
輸入: grant all privileges on . to 'root'@'%' identified by '123456';
注:第一個’root’是用戶名,第二個’%’是所有的ip都可以遠程訪問,第三個’123456’表示 用戶密碼 如果不常用 就關閉掉
輸入:flush privileges; //刷新

在防火牆關閉之后,使用SQLYog之類的工具測試是否能正確連接

這里寫圖片描述

2,編譯包安裝

Mysql文件准備

將下載好的mysql安裝包上傳到linux服務器
解壓mysql解壓包,並移動到/usr/local目錄下,重命名為mysql。
命令:

tar -xvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.21-linux-glibc2.5-x86_64 /usr/local
cd /usr/local
mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql

這里寫圖片描述

注: mysql默認的路徑是就是/usr/local/mysql ,如果安裝的地方更改,需要更改相應的配置文件。

安裝mysql

切換到mysql的目錄 /usr/local/mysql
輸入:

 ./scripts/mysql_install_db --user=mysql

這里寫圖片描述
成功安裝mysql之后,輸入
service mysql start 或 /etc/init.d/mysql start

這里寫圖片描述
查看是否啟動成功
輸入:

 ps -ef|grep mysql

切換到 /usr/local/mysql/bin 目錄下
設置密碼
mysqladmin -u root password '123456'入mysql
輸入:

mysql -u root -p

設置遠程連接權限
輸入:

grant all privileges on *.* to 'root'@'%' identified by '123456'; 

然后輸入:

flush privileges;

說明: 第一個’root’是用戶名,第二個’%’是所有的ip都可以遠程訪問,第三個’123456’表示用戶密碼 如果不常用就關閉掉。

使用本地連接工具連接測試

這里寫圖片描述

二、MySql搭建遇到的錯誤解決辦法

1,mysql離線安裝出現:Can't change to run as user 'mysql' ; Please check that the user exists!

原因:沒有該用戶。
解決辦法:創建該用戶!
例如:
添加用戶:

groupadd -g 315 mysql

用戶加入mysql:

useradd -u 315 -g mysql -d /usr/local/mysql -M mysql

再次輸入

 ./scripts/mysql_install_db --user=mysql

成功!
這里寫圖片描述

2,安裝完mysql之后,輸入service mysql start 提示 mysql: unrecognized service。

問題原因: 是因為/etc/init.d/ 不存在 mysql 這個命令,所以無法識別。
解決辦法:
1.首先查找mysql.server文件在哪
輸入:

find  /  -name mysql.server

2.將mysql.server 復制到/etc/init.d/目錄下,並重命名為mysql或mysqld

輸入:

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

3.測試是否可以使用該命令
輸入:

service mysql status

service mysqld status

這里寫圖片描述

3,mysql數據導入報錯

錯誤:Got a packet bigger than‘max_allowed_packet’bytes的問題

2個解決方法:

1.臨時修改:mysql>set global max_allowed_packet=524288000;修改 #512M

2.永久修改: 編輯my.cnf, 在 [MySQLd] 部分添加一句(如果存在,調整其值就可以):
max_allowed_packet=10M

成功之后重啟mysql。

4,mysql數據庫關於max_allowed_packet的問題

主要是mysql的JDBC連接限制了最大包長度1024B,即1KB
查詢當前數據庫的包長度顯示: show VARIABLES like '%max_allowed_packet%';
修改此參數
解決方案一(臨時): 進入msyql
輸入:
set global max_allowed_packet = 2*1024*10
更改最大值

解決方案二(永久):修改mysql.cnf(windows下my.ini),在[mysqld]段或者mysql的server配置段 進行修改。

max_allowed_packet = 20K。

修改成功后,重啟mysql。

三、MySql 用到的一些命令

1.查看mysql連接數

  SHOW FULL PROCESSLIST;

2.查看mysql的配置

show variables like "%innodb%";

3.查看mysql事件是否開啟

show variables like 'event_scheduler';

4.查看mysql鎖的狀態

是否鎖表:

 SHOW OPEN TABLES WHERE In_use > 0;
SHOW INNODB STATUS/G;

5.查看mysql data的存放位置

SHOW VARIABLES LIKE '%datadir%'

6.查看mysql 的超時時間設置

show variables like '%timeout%';

四、MySql修改密碼

1,知道原來的myql數據庫的root密碼;

在終端命令行修改

輸入

 mysqladmin -u root -p password "新密碼"

回車

 Enter password: 【輸入原來的舊密碼】

登錄mysql系統修改

進入mysql
輸入:

 mysql -uroot -p 回車 Enter password: 【輸入原來的密碼】

進入之后
輸入:

use mysql;
update user set password=password("新密碼") where user='root';
flush privileges;

然后使用剛才輸入的新密碼即可登錄。

2,不知道原來的myql的root的密碼;

首先,你必須要有操作系統的root權限了。要是連系統的root權限都沒有的話,先考慮root系統再走下面的步驟。 類似於安全模式登錄系統。
需要先停止mysql服務

service mysql stop

/etc/init.d/mysql stop

注:如果mysql不行,就用mysqld
當提示mysql已停止后進行下一步操作

在終端命令行輸入:

mysqld_safe --skip-grant-tables &  

輸入mysql登錄mysql系統

use mysql;
UPDATE user SET password=password("新密碼") WHERE user='root';      
flush privileges;
exit;

重新啟動mysql服務
這樣新的root密碼就設置成功了。

五、MySql主從搭建

主從搭建參考:http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label2

說明:搭建MySql的主從時,如復制名稱出現了錯誤,那么嘗試使用用手動輸入命令。

1,事前准備

信息
操作系統:CentOS6.8
Mysql:5.6
IP:192.169.2.156 (主),192.169.2.98(從)

確保MySql已經成功安裝 !

2,配置更改

更改mysql中的my.cnf文件
添加如下:
主(Master):

     
#任意自然數n,只要保證兩台MySQL主機不重復就可以了。
server-id=1
#開啟二進制日志
log-bin=mysql-bin  
#步進值auto_imcrement。一般有n台主MySQL就填n 
auto_increment_increment=2
#起始值。一般填第n台主MySQL。此時為第一台主MySQL   
 auto_increment_offset=1 
#忽略指定的數據庫 
binlog-ignore=mysql   
binlog-ignore=information_schema  
#要同步的數據庫(多個可以使用逗號隔開),默認所有庫
replicate-do-db=DBTEST  

從(Slave):

server-id=2
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=DBTEST 

更改完配置之后重啟!

3,主從配置

主(Master)
master新建slave用戶
進入MySql之后輸入:

grant replication slave on *.* to 'slave_account'@'192.169.2.98' identified by '123456'; 

說明: 設置一個slave_account用戶擁有REPLICATION SLAVE權限,可以訪問的ip為192.169.2.98,並設置密碼為123456。
如果想某個網段的服務器都能登錄,可以使用192.168.2.% 。表示192.168.2.0-192.168.2.255的Server都可以用slave_account用戶登陸主服務器。
如果想所有的服務器都能登錄,那么可以設置為 % 。

然后輸入:

flush privileges;

查看信息,並記錄下文件名稱和分區ID

SHOW MASTER STATUS;

這里寫圖片描述

從(Slave):
獲取master的授權信息之后,輸入slave的授權命令:

change master to master_host='192.169.2.156',master_user='slave_account',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=427;

確保成功執行!

4,主從測試

從(Slave):
開始主從復制:
輸入:

START SLAVE;

查看主從復制是否配置成功:

SHOW SLAVE STATUS\G

這里寫圖片描述

說明:當看到Slave_IO_Running: YES、Slave_SQL_Running: YES 說明成功,否則失敗。

主(Master)
首先創建一個DBTEST數據庫,然后創建test表,並插入兩條數據。
這里為了看起來更加明朗,我是用的是SQLYog 工具進行操作的。
進入mysql執行如下腳本:

CREATE DATABASE`DBTEST`;
USE `DBTEST`;
CREATE TABLE `test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

insert  into `test`(`id`,`name`) values (1,'張三'),(2,'李四');

查看
輸入:

select * from test;

這里寫圖片描述

從(Slave):
查看
輸入:

select * from test;

這里寫圖片描述

從數據庫並沒有執行腳本,但是信息一致,說明成功同步了。

繼續測試,在主(master)刪除一條數據,查看從的數據。
主(Master)
這里寫圖片描述

從(Slave):
這里寫圖片描述

可以看到已經完全同步了!

那么本篇教程就到此結束了,謝謝閱讀!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM