MySQLのrootパスワード忘れた時の対処法

環境
CentOS 7.2
・MySQL5.7

mysqldが起動している状態からの操作内容。

systemctl stop mysqld
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
systemctl start mysqld

mysql -u root
use mysql
update user set authentication_string=password('新しいパスワード') where user='root';
fulsh privileges;
quit

このあと、OS再起動して、無事にMySQLにrootでログインできた。

よく使うコマンド

現在、OracleGoldを取得するべく学習だが、学習時によく使用するコマンドを列挙(のちのち整理)していく予定。

・describe <表名>
表の全てのカラム・型を表示。

・show parameter [<初期パラメータの文字列>]
初期パラメータの値を表示。
初期パラメータの文字列は、部分一致。
指定しない場合は全ての初期パラメータを表示。

Oracleアーキテクチャ

Oracleデータベースサーバの構成

OracleデータベースサーバはOracleインスタンスOracleデータベースから構成される。

Oracleインスタンスの構成

OracleインスタンスSGAバックグラウンドプロセスから構成される。

◇SGAの構成要素
・共有プール:解析済みのSQLコードやPL/SQLコード、実行計画などを保持。
・データベースバッファキャッシュ(DBBC):データファイルから読み込まれたデータを保持。
REDOログバッファ:データの変更ログ(REDOログ)を保持。

◇バックグラウンドプロセスの種類(主要なところ)
・DBWn:DBBCのデータをデータファイルに書き込む。
・LGWR:REDOログバッファのデータを[オンライン]REDOログファイルに書き込む。
・CKPT:チェックポイントをDBWnに伝える。また、制御ファイルとデータファイルヘッダ部にSCNを書き込む。
・SMON:インスタンスリカバリを実施。
・PMON:プロセス障害のリカバリを実施。メモリの掃除とか、排他ロックの解放とか。
・ARCn:REDOログファイルのデータをアーカイブログファイルに書き込む。(コピー)
・MMON:メトリック情報とか管理してた気がする。
・MMAN:メモリ管理。

Oracleデータベースの構成

Oracleデータベースは、制御ファイルデータファイルREDOログファイルから構成される。(主に)

・制御ファイル:データベースの物理構造や制御情報が記載。データファイル、REDOログファイルのパスとかも書いてる。
・データファイル:表や索引などの実データを保存。
REDOログファイル:REDOログを保存。

仮想サーバにoracle11g2インストール

久しぶりに必要に駆られたので実施。

はまった所は下記4点。

1.runInstaller実行時にX関連のエラー発生

下記参照し、yum install xorg-x11-appsでエラー解消。
Freak: Oracle 11g R2インストール

2.OUI豆腐問題発生

下記参照し、OracleにBundleされているJRE以外のJREに置き換えて実行するやり方にて解消。
OUI起動時にターミナルが文字化けする - エンジニア成長日記

3.EM起動せず。

Oracleインストール完了。起動停止までできることを確認したが、
EMが起動しない。(emctl start dbconsoleでエラー)

下記参照し、IPアドレスに対するhostsエントリ(localhost)を追加し、
下記の2,4の対応を実施した所、解消。EMが起動した。
反逆精神の日記 : oracle 11gR2 win32bit版 インストール時の注意点

4.Firefoxhttps接続できない。

下記参照し、http接続でEMを見るようにした。
SSLを無効化して非SSL(http)でOEMにアクセスする方法 | Step On Board


以上、なかなか大変だった。

日本語man導入

方法

1.yumで日本語manパッケージ取得

[root@centos6 man]# yum -y install man-pages-ja.noarch

2.ロケール変更
[変更前]

[root@centos6 man]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

[変更後]

[root@centos6 man]# cat /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

3.OS再起動

結果

manの内容が日本語で表示されるようになった。
本当は英語読めれば一番良いのですが。

[root@centos6 ~]# man ls
LS(1)                                                                    LS(1)

名前
       ls, dir, vdir - ディレクトリの中身をリスト表示する

書式
       ls [options] [file...]

       POSIX オプション: [-CFRacdilqrtu1]

       GNU  オプション (簡略形式): [-1abcdfghiklmnopqrstuvxABCDFGHLNQRSUX] [-w
       cols]  [-T  cols]   [-I   pattern]   [--block-size=SIZE]   [--classify]
       [--color[={none,always,auto}]]   [--file-type]   [--full-time]  [--for-
       mat={across,commas,long,single-column,verbose,vertical}] [--human-read-
       able]       [--indicator-style={none,file-type,classify}]      [--quot-
       ing-style={c,clocale,escape,literal,locale,shell,shell-always}]
       [--show-control-chars]   [--si]  [--sort={none,extension,size,time,ver-
       sion}]  [--time={atime,access,ctime,status,use}]  [--help]  [--version]
       [--]

説明
       プ ログラム ls は、最初にディレクトリでない引き数 file をリスト表示する
       。それから、ディレクトリである引き数について、それぞれのディレクトリ に
:[root@centos6 ~]# 

自動ログイン用Teratermマクロ

自動ログイン、自動ログ取得のTeratermマクロ。
サンプルで作成。
複数のホストやユーザ名に対応するためには
inputboxと条件文を用いればOK。(やっていませんが)

;=== information for connect
HOSTADDR = '***'
USERNAME = '***'
PASSWORD = '***'
PASSWORD_FOR_ROOT = '***'

NORMAL_PROMPT = "$"
SUPERUSER_PROMPT = "#"
;===

;=== information for log file
LOG_FILE = 'D:\Teraterm\log\'
getdate LOG_NAME '\&h_%Y%m%d_%H%M%S.log'
strconcat LOG_FILE LOG_NAME
;===

;=== create command for connect
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
;===

;=== connect to server
connect COMMAND
;===

;=== logfile create check
logopen LOG_FILE 0 0
;===

;=== switch user to root
wait NORMAL_PROMPT
sendln "su -"
wait "Password:"
sendln PASSWORD_FOR_ROOT
wait SUPERUSER_PROMPT

sendln "whoami"
wait SUPERUSER_PROMPT
sendln "uname -a"
wait SUPERUSER_PROMPT
sendln "date"
wait SUPERUSER_PROMPT
;===

;=== end macro
end
;===

ホスト名の変更

暫定的な方法
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# hostname centos6.8
[root@localhost ~]# hostname
centos6.8
恒久的な方法
[root@localhost ~]# ls -l /etc/sysconfig/network
-rw-r--r--. 1 root root 46 Jun  5 16:44 /etc/sysconfig/network
[root@localhost ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost.localdomain
[root@localhost ~]# cp -p /etc/sysconfig/network /etc/sysconfig/network_20160606
[root@localhost ~]# vi /etc/sysconfig/network
[root@localhost ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=centos6

再起動後、変更後のホスト名が表示される。

[root@centos6 ~]# hostname
centos6
余談

恒久的な方法において、HOSTNAME=centos6.8としていたが、再起動後のホスト名が「centos6」であった。
これは、HOSTNAMEの指定が「ホスト名」.「ドメイン名」と認識されるため。