■CALENDAR■
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30   
<<前月 2010年09月 次月>>
■LOGIN■
現在のモード: ゲストモード
USER ID:
PASSWORD:
■NEW ENTRIES■
■RECENT COMMENTS■
■RECENT TRACKBACK■
■CATEGORIES■
■ARCHIVES■
■LINK■
■PROFILE■
■POWERED BY■
BLOGN(ぶろぐん)
BLOGNPLUS(ぶろぐん+)
■OTHER■

MySQLの重複レコード削除
自己メモ備忘録です。

select文ならdistinct keyで重複を省いて結果を返してくれますが、レコードその物を消したいときどうするか考えてみました。

1.まずは現在のテーブルのレコード数を算出
mysql> select count(*) from table_now;
+----------+
| count(*) |
+----------+
| 348748 |
+----------+
1 row in set (0.00 sec)

2.distinct tel で電話番号のユニーク数を確認
mysql> select count(distinct tel) from table_now;
+---------------------+
| count(distinct tel) |
+---------------------+
| 238354 |
+---------------------+
1 row in set (3.15 sec)


3.telとname(念の為)でグループをかけたものをtemp_tableに格納
mysql> CREATE TABLE temp_table as SELECT * FROM table_now GROUP BY tel,name;
Query OK, 238354 rows affected (18.05 sec)
Records: 238354 Duplicates: 0 Warnings: 0


4.temp_tableのレコード数を確認
mysql> select count(*) from temp_table;
+----------+
| count(*) |
+----------+
| 238354 |
+----------+
1 row in set (0.00 sec)

5.ユニーク数と合致したので、table_nowを削除
mysql> DROP TABLE table_now;
Query OK, 0 rows affected (0.18 sec)

6.temp_tableをtable_nowにalter table
mysql> ALTER TABLE temp_table RENAME TO table_now;
Query OK, 0 rows affected (0.00 sec)

7.一応確認
mysql> select count(*) from table_now;
+----------+
| count(*) |
+----------+
| 238354 |
+----------+
1 row in set (0.00 sec)

これで完了です。

PHPで関数作っておけば引数渡すだけで一瞬で終わっちゃいます☆

| Linux::PHP + MySQL | 11:01 AM | comments (74) | trackback (0) |
MySQL 5.xで月別時間帯集計
datetime型の集計で月別とか時間別とかMySQLだけで集計できないかな??って思ってテスト
うまくできたんで自己メモハート

select substring(datetime,6,2) as month,substring(datetime,12,2) as hour,concat(format(count(*),0),"件") as cnt from t_record where datetime >= '2009-06-01 00:00:00' and datetime <= '2009-11-30 23:59:59' group by month,hour;

| Linux::PHP + MySQL | 04:00 PM | comments (0) | trackback (0) |
samba設定
VPN上にsambaサーバー立ち上げて、セグメント毎にパーティション分けて、ネットワークアドレスでアクセスコントロールして、cronで定期的にバックアップうっかり削除なんかも復元できるようにしているサーバーがあるんですが、ひょんなことから特定の人だけで使いたいという要望がでてきました。

特定の人は2拠点に分かれており、その2拠点には大勢の社員がいてるので、ネットワークアドレス(24bitまで)の制御ではダメで、仮に32bitまでみてコントロールさせてもいいのですが手動でそのアドレスさえ割り振っちゃえばその2拠点からなら誰でもアクセスできてしまうので、ちょいと試行錯誤しました。


まずはsmb.confに以下の内容を追記

[passwdFolder]
comment = パスワード制限共有フォルダ
path = /usr/local/share/xxx/yyy
guest ok = no
hosts allow = 192.168.101. 192.168.102. 127.
writable = yes
printable = no
security = user
browseable = no
client ntlmv2 auth = yes
valid users = User1 User2


ポイントはこの3行

1.通常 globalに入れちゃう security = user を[passwdFolder]にだけ適用
2.browseable = no これを入れることによって、フォルダが非表示になるので、フォルダ名まで知っている人だけがわかる。
3.client ntlmv2 auth = yes Vista business,Vista home basic,XP Pro,XP Homeなど様々なOSがあり、動きが異なったので、認証方式を明示。


またすべてのOSで \\192.168.100.1(Sever IP)\passwdFolder\にアクセスすると、なぜかユーザ名が192.168.100.1\Guestになり変更できない…
なので、

Vista business,Vista home basic,XP Pro は

コントロールパネル -> ユーザ
(ログオンするユーザを選択し)ネットワークパスワードの管理に

server 192.168.100.1
ユーザ 192.168.100.1\loginUserName

を登録してしまえばOK。

あとは認証方式を揃えるために、レジストリエディタで以下の値を2に変更。
HKEY_LOCAL_MACHINE>System>CurrentControlSet>Control\Lsa\LmCompatibilityLevel

でもXP Homeにはネットワークパスワードの管理に追加はありません(^^;

でそこでcmd立ち上げて、

net use \\192.168.100.1\passwdFolder /user:User1

と入力すればパスワードを求められますので、 smbpasswd -s User1 で指定したパスワードを入力すればOKです。

この接続が確認できれば、ファイル名を指定して実行から \\192.168.100.1\passwdFolder でアクセスすればフォルダの中身が見えるはずです。

案外こういう運用されて例って少なかったし、Windowsとの相互設定の問題もあったので自己メモとして。




| Linux | 08:36 PM | comments (0) | trackback (0) |
Squidで許可サイトのみ接続
squidで社内PCを業務に関係あるサイトのみ接続できるようにしました。

vi /etc/squid/squid.conf

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl localnet src 192.168.1.0/255.255.255.0
acl localnet src 192.168.10.0/255.255.255.0
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

acl allowlist url_regex "/etc/squid/list.txt"

/etc/squid/list.txt に許可サイトを正規表現で記述。

vi /etc/squid/list.txt
^http://maps.google.co.jp/
^http://www.google.com/

あとはクライアントPC(Windows)のレジストリを編集して、proxyを外せないようにし、念のため接続タブも消しておきました。

HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel\Proxy
1:プロキシ設定変更不可         0:可

HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel\ConnectionsTab
1:接続タブ無効化            0:有効化




| Linux::Linux | 09:23 AM | comments (17) | trackback (0) |
IP Adress変更
久々にIPを変更したら、resolv.confの編集を忘れてしまってメールが送れなくさせてしまいました汗
まぁ冷静に考えて、digコマンド引いた時点でスグわかりましたが、自己メモがてら。

IP addressを変更する際、以下のファイルを編集すること。

/etc/sysconfig/network-scripts/ifcfg-eth0
/var/named/chroot/etc/named.conf
/var/named/chroot/etc/named.conf で指定したファイル
/etc/resolv.conf

あとは稼働しているserverによって/etc/postfix/main.cf や/etc/httpd/conf/httpd.conf などを編集!

| Linux::Linux | 03:19 PM | comments (0) | trackback (0) |
PAGE TOP ↑